Moje dane csv wyglądają tak:
nagłówek 1, nagłówek 2, nagłówek 3, nagłówek 4, nagłówek 5, wartość1_1, wartość2_1, wartość3_1, wartość4_1, wartość5_1, wartość1_2, wartość2_2, wartość3_2, wartość4_2, wartość5_2 ....
Jak czytasz te dane i konwertujesz na taką tablicę za pomocą Javascript ?:
[nagłówek1: wartość1_1, nagłówek2: wartość2_1, nagłówek3: wartość3_1, nagłówek4: wartość4_1, nagłówek5: wartość5_1], [nagłówek1: wartość1_2, nagłówek2: wartość2_2, nagłówek3: wartość3_2, nagłówek4: wartość4_2, nagłówek5: wartość5_2] ....
Próbowałem tego kodu, ale bez powodzenia !:
<script type="text/javascript">
var allText =[];
var allTextLines = [];
var Lines = [];
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "file://d:/data.txt", true);
txtFile.onreadystatechange = function()
{
allText = txtFile.responseText;
allTextLines = allText.split(/\r\n|\n/);
};
document.write(allTextLines);<br>
document.write(allText);<br>
document.write(txtFile);<br>
</script>
javascript
jquery
Mahesh Thumar
źródło
źródło
file://...
było dozwoloneXMLHttpRequest
.Odpowiedzi:
UWAGA: Wymyśliłem to rozwiązanie, zanim przypomniano mi o „specjalnych przypadkach”, które mogą wystąpić w prawidłowym pliku CSV, takich jak cytaty. Pozostawiam moją odpowiedź tym, którzy chcą czegoś szybkiego i brudnego, ale polecam odpowiedź Evana ze względu na dokładność.
Ten kod będzie działał, gdy
data.txt
plik zawiera jeden długi ciąg znaków oddzielonych przecinkami, bez znaków nowej linii:data.txt:
javascript:
Poniższy kod będzie działał na „prawdziwym” pliku CSV z podziałem wierszy między każdym zestawem rekordów:
data.txt:
javascript:
http://jsfiddle.net/mblase75/dcqxr/
źródło
allText.split(/\r\n|\n/)
podział. Jeśli wszystkie dane są w rzeczywistości jednym długim ciągiem danych oddzielonych przecinkami bez znaków nowej linii, nie jest to prawdziwy plik CSV.1, "IETF allows ""quotes"", commas and \nline breaks"
co jest dozwolone, ponieważ ciąg znaków jest otoczony podwójnymi cudzysłowami, a podwójne cudzysłowy są poprzedzane znakami ucieczki.var allTextLines = allText.split("\r");
Potem zadziałało świetnie! Dzięki!Nie musisz pisać własnego ...
The jQuery-CSV ma wywoływaną funkcję,
$.csv.toObjects(csv)
która wykonuje mapowanie automatycznie.Uwaga: Biblioteka została zaprojektowana do obsługi danych CSV zgodnych z RFC 4180 , w tym wszystkich nieprzyjemnych przypadków brzegowych, które przeoczają większość „prostych” rozwiązań.
Jak już wspomniano w @Blazemonger, najpierw musisz dodać podział wiersza, aby dane były prawidłowe CSV.
Za pomocą następującego zestawu danych:
Użyj kodu:
Dane wyjściowe zapisane w „danych” będą:
Uwaga: Technicznie sposób, w jaki napisałeś mapowanie klucz-wartość, jest nieprawidłowy JavaScript. Obiekty zawierające pary klucz-wartość powinny być owinięte w nawiasy.
Jeśli chcesz to wypróbować sam, sugeruję, abyś zapoznał się z Podstawową demonstracją użycia w zakładce „toObjects ()”.
Oświadczenie: Jestem oryginalnym autorem jQuery-CSV.
Aktualizacja:
Edytowano, aby użyć zestawu danych dostarczonego przez operację i zawierał link do wersji demonstracyjnej, w której dane można przetestować pod kątem ważności.
Aktualizacja 2:
Z powodu wyłączenia kodu Google. jquery-csv został przeniesiony do GitHub
źródło
csv
przekazany parametr to ciąg csv - przeczytaj plik csv jako tekst, aby uzyskać ciąg csv.Nie dziel przecinków - nie będzie działać dla większości plików CSV, a to pytanie ma zdecydowanie zbyt wiele widoków, aby dane wejściowe pytającego mogły zostać zastosowane do wszystkich. Analiza CSV jest trochę przerażająca, ponieważ nie ma naprawdę oficjalnego standardu, a wielu pisarzy z ogranicznikami nie bierze pod uwagę przypadków skrajnych.
To pytanie jest stare, ale uważam, że istnieje lepsze rozwiązanie niż Papa Parse jest dostępny. To biblioteka, którą napisałem, z pomocą autorów, analizuje tekst lub pliki CSV. To jedyna znana mi biblioteka JS, która obsługuje pliki o wielkości gigabajtów. Z wdziękiem obsługuje również zniekształcone dane wejściowe.
Plik 1 GB parsowany w ciągu 1 minuty:
( Aktualizacja: W przypadku Papa Parse 4 ten sam plik zajął tylko 30 sekund w Firefoksie. Papa Parse 4 jest teraz najszybciej znanym parserem CSV dla przeglądarki).
Analiza tekstu jest bardzo łatwa:
Parsowanie plików jest również łatwe:
Przesyłanie strumieniowe plików jest podobne (oto przykład przesyłania strumieniowego pliku zdalnego):
Jeśli twoja strona blokuje się podczas analizy, Papa może korzystać z robotów WWW, aby utrzymać twoją stronę.
Tata może automatycznie wykrywać ograniczniki i dopasowywać wartości do kolumn nagłówka, jeśli obecny jest wiersz nagłówka. Może także przekształcać wartości liczbowe w rzeczywiste typy liczb. Odpowiednio analizuje podziały wierszy, cytaty i inne dziwne sytuacje, a nawet obsługuje zniekształcone dane wejściowe tak solidnie, jak to możliwe. Czerpałem inspirację z istniejących bibliotek, aby stworzyć Papa, więc podpieram się innymi implementacjami JS.
źródło
Używam d3.js do parsowania pliku csv. Bardzo łatwy w użyciu. Oto dokumenty .
Kroki:
Korzystanie z Es6;
Więcej informacji można znaleźć w dokumentacji .
Aktualizacja - żądanie d3 jest nieaktualne. możesz użyć d3-fetch
źródło
Możesz pomóc PapaParse. https://www.papaparse.com/
Oto CodePen. https://codepen.io/sandro-wiggers/pen/VxrxNJ
źródło
Oto funkcja JavaScript, która analizuje dane CSV, uwzględniając przecinki znalezione w cudzysłowach.
Przykład użycia funkcji do analizy pliku CSV, który wygląda następująco:
w tablice:
Oto jak możesz przekształcić dane w obiekty, takie jak parser csv D3 (który jest solidnym rozwiązaniem strony trzeciej):
Oto działające skrzypce tego kodu .
Cieszyć się! - Curran
źródło
Oto inny sposób na odczyt zewnętrznego CSV do Javascript (przy użyciu jQuery).
Jest trochę bardziej skomplikowany, ale czuję, że wczytując dane do tablic, możesz dokładnie śledzić proces i ułatwia rozwiązywanie problemów.
Może pomóc komuś innemu.
Przykład pliku danych:
A oto kod:
Mam nadzieję, że to pomoże komuś w przyszłości!
źródło
)
znaku w linii 45, więc dodałem ją, ale teraz w linii 9 daje mi błąd konsoli.Uncaught ReferenceError: $ is not defined at index.html:9
Czy mógłbyś w tym pomóc?Lubię mieć regex zrobić jak najwięcej. Wyrażenie regularne traktuje wszystkie elementy jako cudzysłowy lub cudzysłowy, po których następuje separator kolumny lub separator wiersza. Lub koniec tekstu.
Dlatego właśnie ten ostatni warunek - bez niego byłby nieskończoną pętlą, ponieważ wzorzec może pasować do pola o zerowej długości (całkowicie poprawne w csv). Ale ponieważ $ jest twierdzeniem o zerowej długości, nie przejdzie do niezgodności i nie zakończy pętli.
I do twojej wiadomości, musiałem zrobić drugą alternatywę, aby wykluczyć cytaty otaczające wartość; wygląda na to, że działał on przed pierwszą alternatywą w moim silniku JavaScript i biorąc pod uwagę cytaty jako część niecytowanej wartości. Nie zapytam - po prostu mam to do pracy.
źródło
Na tej akceptowanej odpowiedzi ,
Mam to do pracy, zmieniając tutaj 1 na 0:
zmienić na
Obliczy plik z jedną linią ciągłą jako mający allTextLines.length 1. Więc jeśli pętla zaczyna się od 1 i działa tak długo, jak jest mniejsza niż 1, nigdy nie działa. Stąd puste pole ostrzeżenia.
źródło
Jeśli chcesz rozwiązać ten problem bez użycia Ajax , użyj
FileReader()
interfejsu API sieci Web .Przykładowa implementacja:
.csv
plikźródło
źródło
W rzeczywistości możesz użyć lekkiej biblioteki o nazwie dowolny tekst .
lub użyj asynchronicznego oczekiwania:
źródło