Data csv saya terlihat seperti ini:
heading1, heading2, heading3, heading4, heading5, value1_1, value2_1, value3_1, value4_1, value5_1, value1_2, value2_2, value3_2, value4_2, value4_2, value5_2 ....
Bagaimana Anda membaca data ini dan mengkonversi ke array seperti ini menggunakan Javascript ?:
[heading1: value1_1, heading2: value2_1, heading3: value3_1, heading4: value4_1, heading5: value5_1], [heading1: value1_2, heading2: value2_2, heading3: value3_2, heading4: value4_2, heading5: value5_2] ....
Saya sudah mencoba kode ini tetapi tidak berhasil !:
<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
sumber
sumber
file://...
diizinkanXMLHttpRequest
.Jawaban:
CATATAN: Saya membuat solusi ini sebelum saya diingatkan tentang semua "kasus khusus" yang dapat terjadi dalam file CSV yang valid, seperti kutipan yang lolos. Saya meninggalkan jawaban saya untuk mereka yang menginginkan sesuatu yang cepat dan kotor, tetapi saya merekomendasikan jawaban Evan untuk akurasi.
Kode ini akan berfungsi ketika
data.txt
file Anda adalah satu string panjang entri yang dipisahkan koma, tanpa baris baru:data.txt:
javascript:
Kode berikut akan berfungsi pada file CSV "benar" dengan linebreak di antara setiap set catatan:
data.txt:
javascript:
http://jsfiddle.net/mblase75/dcqxr/
sumber
allText.split(/\r\n|\n/)
dibelah. Jika semua data Anda sebenarnya adalah satu string panjang dari data yang dipisahkan koma tanpa baris baru, itu bukan file CSV nyata.1, "IETF allows ""quotes"", commas and \nline breaks"
yang diizinkan karena string dikelilingi dengan tanda kutip ganda, dan tanda kutip ganda itu lolos.var allTextLines = allText.split("\r");
Setelah itu, itu berhasil! Terima kasih!Tidak perlu menulis sendiri ...
The jQuery-CSV perpustakaan memiliki fungsi yang disebut
$.csv.toObjects(csv)
yang melakukan pemetaan secara otomatis.Catatan: Perpustakaan dirancang untuk menangani data CSV apa pun yang sesuai dengan RFC 4180 , termasuk semua kasing tepi yang buruk yang diabaikan oleh sebagian besar solusi 'sederhana'.
Seperti @Blazemonger sudah menyatakan, pertama Anda perlu menambahkan jeda baris untuk membuat CSV data yang valid.
Menggunakan dataset berikut:
Gunakan kode:
Output yang disimpan dalam 'data' adalah:
Catatan: Secara teknis, cara Anda menulis pemetaan nilai kunci adalah JavaScript yang tidak valid. Objek yang berisi pasangan nilai kunci harus dibungkus dengan tanda kurung.
Jika Anda ingin mencobanya sendiri, saya sarankan Anda melihat Demonstrasi Penggunaan Dasar di bawah tab 'toObjects ()'.
Penafian: Saya penulis asli jQuery-CSV.
Memperbarui:
Diedit untuk menggunakan dataset yang disediakan oleh op dan menyertakan tautan ke demo tempat data dapat diuji validitasnya.
Pembaruan2:
Karena penutupan Kode Google. jquery-csv telah pindah ke GitHub
sumber
csv
dilewatkan adalah string csv - baca file csv sebagai teks untuk mendapatkan string csv.Jangan pisah pada koma - itu tidak akan berfungsi untuk sebagian besar file CSV, dan pertanyaan ini memiliki terlalu banyak viewy untuk jenis input data penanya untuk berlaku untuk semua orang. Parsing CSV agak menakutkan karena tidak ada standar yang benar-benar resmi, dan banyak penulis teks terbatas tidak mempertimbangkan kasus tepi.
Pertanyaan ini sudah lama, tetapi saya percaya ada solusi yang lebih baik sekarang karena Papa Parse tersedia. Ini adalah perpustakaan yang saya tulis, dengan bantuan dari kontributor, yang mem-parsing teks atau file CSV. Ini satu-satunya perpustakaan JS yang saya tahu mendukung ukuran file gigabytes. Ini juga menangani input yang salah dengan anggun.
File 1 GB diurai dalam 1 menit:
( Pembaruan: Dengan Papa Parse 4, file yang sama hanya membutuhkan waktu sekitar 30 detik di Firefox. Papa Parse 4 sekarang adalah parser CSV yang paling cepat dikenal untuk browser.)
Parsing teks sangat mudah:
Parsing file juga mudah:
Mengalirkan file serupa (berikut ini contoh yang mengalirkan file jarak jauh):
Jika halaman web Anda terkunci selama parsing, Papa dapat menggunakan pekerja web untuk menjaga situs web Anda reaktif.
Papa dapat mendeteksi pembatas otomatis dan mencocokkan nilai dengan kolom header, jika ada baris header. Itu juga dapat mengubah nilai numerik menjadi tipe angka aktual. Ini secara tepat mem-parsing jeda baris dan kutipan dan situasi aneh lainnya, dan bahkan menangani input yang cacat sekuat mungkin. Saya telah mengambil inspirasi dari perpustakaan yang ada untuk membuat Papa, jadi alat bantu untuk implementasi JS lainnya.
sumber
Saya menggunakan d3.js untuk parsing file csv. Sangat mudah digunakan. Ini dokumennya .
Langkah:
Menggunakan Es6;
Silakan lihat dokumen untuk lebih lanjut.
Pembaruan - permintaan d3 sudah tidak digunakan lagi. Anda bisa menggunakan d3-fetch
sumber
Anda dapat menggunakan PapaParse untuk membantu. https://www.papaparse.com/
Ini CodePen. https://codepen.io/sandro-wiggers/pen/VxrxNJ
sumber
Berikut adalah fungsi JavaScript yang mem-parsing data CSV, akuntansi untuk koma yang ditemukan di dalam tanda kutip.
Contoh penggunaan fungsi untuk mem-parsing file CSV yang terlihat seperti ini:
ke dalam array:
Inilah cara Anda dapat mengubah data menjadi objek, seperti parser csv D3 (yang merupakan solusi pihak ketiga yang solid):
Ini biola yang berfungsi baik dari kode ini .
Nikmati! - Curran
sumber
Berikut ini cara lain untuk membaca CSV eksternal ke dalam Javascript (menggunakan jQuery).
Ini sedikit lebih panjang, tetapi saya merasa dengan membaca data ke dalam array Anda dapat mengikuti proses dan membuat pemecahan masalah yang mudah.
Mungkin bisa membantu orang lain.
Contoh file data:
Dan ini kodenya:
Semoga ini bisa membantu seseorang di masa depan!
sumber
)
tanda pada baris 45 jadi saya menambahkannya, tetapi sekarang pada baris 9 memberikan saya kesalahan konsol.Uncaught ReferenceError: $ is not defined at index.html:9
Dapatkah Anda membantu dalam hal ini?Saya suka agar regex melakukan sebanyak mungkin. Regex ini memperlakukan semua item sebagai dikutip atau tidak dikutip, diikuti oleh pembatas kolom, atau pembatas baris. Atau akhir dari teks.
Itulah sebabnya kondisi terakhir - tanpanya akan menjadi infinite loop karena polanya dapat cocok dengan bidang panjang nol (benar-benar valid dalam csv). Tapi karena $ adalah pernyataan panjang nol, itu tidak akan berkembang menjadi tidak cocok dan mengakhiri loop.
Dan FYI, saya harus membuat alternatif kedua mengecualikan kutipan yang mengelilingi nilai; Sepertinya itu mengeksekusi sebelum alternatif pertama pada mesin javascript saya dan mempertimbangkan tanda kutip sebagai bagian dari nilai tanda kutip. Saya tidak akan bertanya - baru mulai bekerja.
sumber
Per jawaban yang diterima ,
Saya mendapatkan ini untuk bekerja dengan mengubah 1 ke 0 di sini:
diubah menjadi
Ini akan menghitung file dengan satu baris kontinu sebagai memiliki allTextLines.length dari 1. Jadi jika loop dimulai pada 1 dan berjalan selama kurang dari 1, ia tidak pernah berjalan. Karenanya kotak peringatan kosong.
sumber
Jika Anda ingin menyelesaikan ini tanpa menggunakan Ajax , gunakan
FileReader()
Web API .Contoh implementasi:
.csv
filesumber
sumber
Sebenarnya Anda bisa menggunakan pustaka ringan yang disebut teks apa saja .
atau gunakan async-wait:
sumber