C#にCSVリーダー/ライターライブラリはありますか?[閉まっている]


111

任意のあるCSV C#でのリーダ/ライタライブラリは?


68
失礼ですが同意できません。これは間違いなく建設的な質問であり、Googleでの最初の結果です.net csv library。逸話的ではあるが、私の主張としての証拠は、この質問が過去6年間で22000回以上閲覧されたということです。
shovavnik 2016年

5
真実は言った-グーグルの最初のヒット
ロベット

回答:


107

CsvHelperを試してください。FastCsvReaderと同じくらい簡単に使用でき、書き込みも行います。私は過去にFastCsvReaderに非常に満足していましたが、書き込みも行う何かが必要で、FileHelpersには満足していませんでした。

読書:

var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();

書き込み:

var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );

完全な開示:私はこのライブラリの作成者です。


3
ありがとう、ジョシュ。私はこれを試してみました、そしてそれは高速でメモリ効率の両方でした。ドキュメントは初めてのユーザーには少し改善できると思いますが、それで十分でした。
サム

カスタムタイプなしでこのライブラリを使用して、テーブルグリッド(カスタム)を反復処理してヘッダーを書き出し、各行フィールドを渡す方法はありますか?ファイルのエラーを回避する方法を探しています(適切にエスケープするなど)。
u84six 2018年

はい。使用できますWriteField。こちらのドキュメントを確認してくださいjoshclose.github.io/CsvHelper
Josh Close

1
@Zimano真実ではない。個々のフィールドを読み取ることも、行の文字列配列を取得することもできます。ドキュメントを確認してください。joshclose.github.io/CsvHelper
Josh Close

@JoshCloseああ、それは聞いて良かった、ありがとう!ここでは、スタートガイドのみをチェックアウトしました:joshclose.github.io/CsvHelper/…そして、私のユースケースは含まれていません。もう少し調べれば良かったのに、すみません。ただし、そのページでは、ある種のマッピングの使用がの推奨される使用方法であると記載されていますCsvHelper。おそらくそれはその場でいくつかの代替の読み取り戦略を提供できるでしょうか?元の
コメント

21

フレームワーク自体には、いくつかのオプションがあります。

最も簡単な方法の1つは、Microsoft.VisualBasicを参照してから、TextFieldParserを使用することです。コアフレームワークで完全に機能するCSVリーダーです。

別の良い代替手段は、データセット使用してCSVファイルを読み取ることです


6
なぜそれがMicrosoft.VisualBasicアセンブリにあるのか疑問に思っていました... MSはC#開発者がCSVを使用していないと思っていましたか?
Thomas Levesque

4
@Thomas:特に、多くのC#開発者がVisualBasicアセンブリをプロジェクトに含めることを考えている

2
ええ、そこにはたくさんの素敵な「グッズ」があります。VBには、元々フレームワークで実際には考慮されていなかった言語構造がいくつかありますが、実装しないとVB6ユーザーを獲得できなかったためです。DevicesおよびApplicationServices名前空間には、あらゆる種類の便利なものがあります。
リードコプシー、

20
@Roboto、プロジェクトでMicrosoft.VisualBasicを参照することにうんざりしているC#開発者は、無知の言語を盗むものです。さらに悪いことに、彼らは.NETをまったく理解していません。
アッシュ

3
別のVB組立逸品CopyDirectoryです:stackoverflow.com/questions/58744/...

17

Sebastien Lorionには、CSVCodeProjectでA Fast CSV Readerと呼ばれる優れたリーダーがあります。おそらくC#に最適なものの1つであり、無料です。

書く限りでは、を使用してくださいStreamWriter

以下はDataGridView、ファイルにを書き込むための定型コードです。

private void exportDGVToCSV(string filename)
{
    if (dataGridView1.Columns.Count != 0) 
    {    
        using (Stream stream = File.OpenWrite(filename))
        {
            stream.SetLength(0);
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // loop through each row of our DataGridView
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string line = string.Join(",", row.Cells.Select(x => $"{x}"));
                    writer.WriteLine(line);
                }

                writer.Flush();
            }
        };
    }
}

2
これは私のお気に入りです。素晴らしい小さな図書館。
Alex、

2
CSVの記述は簡単です。通常のテキスト出力方法を使用し、カンマで区切ります。あなたは本当に唯一の...読み取るためのライブラリ/カスタムハンドラを必要とする
リードCopsey

10
@リード:コンマと引用符を正しくエスケープしたい場合は、それほど簡単ではありません。これに標準化があるかどうかさえわかりませんが、それを行うことは非常に一般的です。
Stefan Steinegger、2009

26
CSVの記述は、それよりも少し複雑です。CSVファイルで表現するデータにカンマまたは改行が含まれている場合は、データを引用符で囲む必要があります。新しく引用符で囲まれたデータに引用符がある場合は、二重引用符で引用符をエスケープする必要があります。あなたは確かにそのロジックを自分でコーディングすることができますが、ライブラリがあなたのためにそれをするのは素晴らしいでしょう。
Tinister、2009

4
標準化はRFC 4180です。tools.ietf.org
Josh Close

7

はい-あなたは実際に詳細を求めていると思いますか?

トライFileHelpers


まあ、私はしましたが、いくつかの奇妙な理由でFileHelpersはランダムに故障しました。さらに、FileHelpersライブラリは長い間開発されていません。
Erik Schierboom、2011

1
FileHelpersは現在活発に開発されています。GitHubを参照しください。
xmedeko 2016

3

数十があります。

http://www.filehelpers.net/は、最も一般的なものの1つです。

いくつかのシナリオではFilehelpersが制限的であると思い、代わりにThe Fast CSV Readerを使用していると言うべきです。私の経験では、実行時までCSVファイルまたはインポートマッピングの形式がわからない場合-これは使用するのに適したライブラリです。


ファイルヘルパーも使用します。
Tangurena、2009

1
FileHelpersを設定するのは面倒です。FastCsvReaderははるかに使いやすくなりました。
Josh Close

FastCsvReaderの+1。素晴らしい演技。しかし、それは主にリーダー/パーサーです。作家ではありません。
Mehdi LAMRANI
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.