1. ホーム
  2. c#

[解決済み] C#によるCSVファイルの読み込み

2022-03-09 02:19:01

質問

簡単なインポートアプリケーションを書いているのですが、CSVファイルを読み込んで、その結果を DataGrid を表示し、CSVファイルの破損した行を別のグリッドに表示します。例えば、5値より短い行を別のグリッドに表示します。私はこのようにしようとしています。

StreamReader sr = new StreamReader(FilePath);
importingData = new Account();
string line;
string[] row = new string [5];
while ((line = sr.ReadLine()) != null)
{
    row = line.Split(',');

    importingData.Add(new Transaction
    {
        Date = DateTime.Parse(row[0]),
        Reference = row[1],
        Description = row[2],
        Amount = decimal.Parse(row[3]),
        Category = (Category)Enum.Parse(typeof(Category), row[4])
    });
}

が、この場合、配列の操作は非常に困難です。値を分割する良い方法はないでしょうか?

どのように解決するのですか?

車輪の再発明はやめましょう。.NET BCLにすでにあるものを利用しましょう。

  • への参照を追加します。 Microsoft.VisualBasic (そう、VisualBasicと書いてありますが、C#でも同じように動作します。最後はすべてILであることを忘れないでください)
  • を使用します。 Microsoft.VisualBasic.FileIO.TextFieldParser クラスを使用して CSV ファイルをパースします。

以下はサンプルコードです。

using (TextFieldParser parser = new TextFieldParser(@"c:\temp\test.csv"))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    while (!parser.EndOfData) 
    {
        //Processing row
        string[] fields = parser.ReadFields();
        foreach (string field in fields) 
        {
            //TODO: Process field
        }
    }
}

私のC#プロジェクトでは、とてもうまくいっています。

以下は、その他のリンク/情報です。