C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 124 を表示中)
■73910 / )  Re[2]: CSVファイルを読み込む際に改行を消さないようにするには?
□投稿者/ ainax (2回)-(2014/11/14(Fri) 08:46:14)
No73875 (WebSurfer さん) に返信
No73875 (WebSurfer さん) に返信

おそらく TextfieldParser では空行がうまく処理できないかと思います。
(ReadLine で1行読んで、ダブルクォートを自前で処理する方法ならいけると思いますが、
ReadField が使えないなら TextfieldParser を使うメリットが・・・)

もしも空行含め手軽に処理したい場合は、 CsvHelper というライブラリを使われると
いいかもしれません。

Nuget で install-package CsvHelper と打ち込めば自動で参照設定までしてくれます。

使い方は TextfieldParser とはだいぶ違いますが、後々の処理を考えると CsvHelper は
いろいろとカスタマイズした読み込み、書き込みができて楽だと思います。
(1行目を列名と指定したり、その列名を指定して必要な列だけ読み込んだり、
文字列としてではなく、数値や日付の型指定で読み込んだり書き込んだりできます。)

基本的な使い方は、

C:\myData.csv - - - - - - - - - - - -
1, saitou
2, suzuki
3, katou
4, yoshia
- - - - - - - - - - - - - - - - - - - - -

class myData{
public int id {get; set;}
public string name {get; set;}
}

class myDataMapper : CsvClassMap<myData>{
public myDataMapper(){
Map( m => id ); // Map( m => id ).index(0); でもOK。1行目が列名であれば、Map( m => id ).name("id") という形でも読み込めます。ただし1行目が列名だと設定しないとダメだったかも。
Map( m => name);
}
}

class main{
public static void main(){
using( var sr = new IO.StreamReader(@"C:\myData.csv")){
var reader = new CsvReader( sr );
var csv = reader.GetRecords<myData>().ToList();

foreach(myData data in csv){
console.WriteLine("id : {0}, name : {1}", data.id, data.name);
}
}
}
}
// ※IDEからコピーしてないので、エラーがあったら自前で直してください。

こんな感じに自前のクラスに Csv のデータを読み込んでいく感じです。

返信 編集キー/


管理者用

- Child Tree -