元ネタは、ここから。
ダブルクオーテーション付のCVSファイルをC#で読み込む方法(From とりカシュの8bit級ブログさん)
知らなかったです。こんなクラスがあるとは・・・。
しかも、.NET 2.0から追加みたいですね。
自前で、ファイルオープンして一行読み込んでsplitして処理するより
こちらの方が簡単です。クォートの処理もうまくしてくれそうな雰囲気です。
(試してないですが・・)
とりカシュさんの方でもとても分かり易いサンプルがありますが、
一応、勉強のためにこちらも作成しました。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.IO; using Microsoft.VisualBasic.FileIO; namespace Gsf.Samples.CSharp{ public class TextFieldParserSample : IExecutable{ ////// 処理を実行します。 /// public void Execute(){ string tmpFileName = null; try{ tmpFileName = Path.GetTempFileName(); // // CSVファイルの作成. // using(StreamWriter writer = new StreamWriter(tmpFileName)){ for(int i = 0; i < 10; i++){ int j = i; writer.WriteLine(string.Format("{0},{1},{2},{3}", j, ++j, ++j, ++j)); } } // // TextFieldParserを用いて読み出し. // using(TextFieldParser parser = new TextFieldParser(tmpFileName)){ // 区切り文字があることを伝える parser.TextFieldType = FieldType.Delimited; // 区切り文字を設定 parser.SetDelimiters(","); // // データを取得. // for(; !parser.EndOfData; ){ Console.WriteLine("{0}: [{1}]", parser.LineNumber.ToString().PadLeft(2, '0'), string.Join(" ", parser.ReadFields())); } } }finally{ if(!string.IsNullOrEmpty(tmpFileName)){ File.Delete(tmpFileName); } } } } }
[追記]
TextFieldParserクラスを利用するには
- Microsoft.VisualBasic.dll
の参照が必要です。