Saya mencoba membaca *.csv
-file.
File *.csv
-file terdiri dari dua kolom yang dipisahkan oleh titik koma (" ; ").
Saya dapat membaca *.csv
-file menggunakan StreamReader dan dapat memisahkan setiap baris dengan menggunakan Split()
fungsi. Saya ingin menyimpan setiap kolom ke dalam array yang terpisah dan kemudian menampilkannya.
Apakah mungkin untuk melakukan itu?
";"
sebagai pemisah ... ini menjadikan CSV sebagai imo non-standar :(Jawaban:
Anda dapat melakukannya seperti ini:
sumber
using
klausa sini, atau setidaknya secara manualClose()
yangreader
seperti itu merupakanIDisposible
sumber daya.column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Parser CSV favorit saya adalah satu yang dibangun di perpustakaan .NET. Ini adalah harta terpendam di dalam namespace Microsoft.VisualBasic. Di bawah ini adalah contoh kode:
Ingatlah untuk menambahkan referensi
Microsoft.VisualBasic
Rincian lebih lanjut tentang parser diberikan di sini: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
sumber
Microsoft.VisualBasic
rakitan kerangka karena biasanya tidak dirujuk secara default.Cara LINQ:
^^ Salah - Edit oleh Nick
Tampaknya penjawab asli berusaha mengisi
csv
dengan array 2 dimensi - array yang berisi array. Setiap item dalam array pertama berisi array yang mewakili nomor baris dengan setiap item dalam array bersarang yang berisi data untuk kolom tertentu.sumber
Anda tidak dapat langsung membuat array karena Anda perlu mengetahui jumlah baris dari awal (dan ini perlu membaca file csv dua kali)
Anda bisa menyimpan nilai dalam dua
List<T>
dan kemudian menggunakannya atau mengubahnya menjadi menggunakan arrayList<T>.ToArray()
Contoh yang sangat sederhana:
NB
Harap perhatikan bahwa ini hanyalah contoh yang sangat sederhana . Menggunakan
string.Split
tidak memperhitungkan kasus di mana beberapa catatan berisi pemisah;
di dalamnya.Untuk pendekatan yang lebih aman, pertimbangkan untuk menggunakan beberapa pustaka spesifik csv seperti CsvHelper di nuget.
sumber
;
menjadi bagian dari nilai, misalnya"value with ; inside it"
. Nilai surround CSV berisi karakter khusus dengan tanda kutip ganda untuk mengatakan bahwa itu adalah string literal.Baru saja menemukan perpustakaan ini: https://github.com/JoshClose/CsvHelper
Sangat intuitif dan mudah digunakan. Memiliki paket nuget juga yang dibuat cepat untuk diimplementasikan: http://nuget.org/packages/CsvHelper/1.17.0 . Tampaknya juga dipelihara secara aktif yang saya suka.
Mengonfigurasinya untuk menggunakan titik koma adalah mudah: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
sumber
Microsoft.VisualBasic.FileIO.TextFieldParser
(lih. @ Habeeb's jawaban)?Saya biasanya menggunakan parser ini dari proyek codep , karena ada banyak karakter yang lolos dan sejenisnya yang menangani untuk saya.
sumber
Berikut adalah variasi saya dari jawaban terpilih teratas:
The
csv
variabel kemudian dapat digunakan seperti dalam contoh berikut:sumber
Jika Anda perlu melewati (head-) garis dan / atau kolom, Anda dapat menggunakan ini untuk membuat array 2 dimensi:
Ini cukup berguna jika Anda perlu membentuk data sebelum Anda memprosesnya lebih lanjut (dengan asumsi 2 baris pertama terdiri dari informasi utama, dan kolom pertama adalah judul baris - yang tidak perlu Anda miliki dalam array karena Anda hanya perlu ingin memperhatikan data).
NB Anda dapat dengan mudah mendapatkan tajuk utama dan kolom ke-1 dengan menggunakan kode berikut:
Contoh kode ini mengasumsikan struktur
*.csv
file Anda sebagai berikut :Catatan: Jika Anda perlu melewati baris kosong - yang terkadang bisa berguna, Anda bisa melakukannya dengan memasukkan
antara
from
danselect
pernyataan dalam contoh kode LINQ di atas.sumber
Anda dapat menggunakan Microsoft.VisualBasic.FileIO.TextFieldParser dll di C # untuk kinerja yang lebih baik
dapatkan contoh kode di bawah ini dari artikel di atas
sumber
Hai semua, saya membuat kelas statis untuk melakukan ini. + cek kolom + penghapusan tanda kuota
sumber
sumber
Berikut adalah kasus khusus di mana salah satu bidang data memiliki titik koma (";") sebagai bagian dari data itu dalam kasus itu sebagian besar jawaban di atas akan gagal.
Solusi itu yang akan terjadi
sumber
Pustaka Angara.Table open-source memungkinkan untuk memuat CSV ke dalam kolom yang diketik, sehingga Anda bisa mendapatkan array dari kolom. Setiap kolom dapat diindeks berdasarkan nama atau indeks. Lihat http://predictionmachines.github.io/Angara.Table/saveload.html .
Perpustakaan mengikuti RFC4180 untuk CSV; memungkinkan inferensi tipe dan string multiline.
Contoh:
Anda dapat melihat tipe kolom menggunakan tipe Kolom, mis
Karena perpustakaan difokuskan pada F #, Anda mungkin perlu menambahkan referensi ke perakitan FSharp.Core 4.4; klik 'Tambahkan Referensi' pada proyek dan pilih FSharp.Core 4.4 di bawah "Assemblies" -> "Extensions".
sumber
Saya telah menghabiskan beberapa jam mencari perpustakaan yang tepat, tetapi akhirnya saya menulis kode saya sendiri :) Anda dapat membaca file (atau database) dengan alat apa pun yang Anda inginkan dan kemudian menerapkan rutinitas berikut untuk setiap baris:
sumber
Saya telah menggunakan csvreader.com (komponen berbayar) selama bertahun-tahun, dan saya tidak pernah punya masalah. Ini solid, kecil dan cepat, tetapi Anda harus membayarnya. Anda dapat mengatur pembatas ke apa pun yang Anda suka.
sumber
Saya hanya seorang siswa yang sedang mengerjakan tesis master saya, tetapi ini adalah cara saya menyelesaikannya dan itu bekerja dengan baik untuk saya. Pertama Anda memilih file Anda dari direktori (hanya dalam format csv) dan kemudian Anda memasukkan data ke dalam daftar.
sumber
Masih salah. Anda perlu mengganti "" dalam tanda kutip. Ini solusi saya Microsoft style csv.
sumber
Saya memiliki perpustakaan yang melakukan persis yang Anda butuhkan.
Beberapa waktu lalu saya telah menulis perpustakaan yang sederhana dan cukup cepat untuk bekerja dengan file CSV. Anda dapat menemukannya dengan tautan berikut: https://github.com/ukushu/DataExporter
Ini bekerja dengan CSV seperti dengan array 2 dimensi. Persis seperti yang Anda butuhkan.
Sebagai contoh, jika Anda membutuhkan semua nilai baris ke-3, Anda hanya perlu menulis:
atau membaca sel ke-2 dari
sumber
Lihat ini
menggunakan CsvFramework;
menggunakan System.Collections.Generic;
namespace CvsParser {
}
sumber