CSV を手動で解析するのは、実際にはかなりトリッキーです。を再利用した方がよい場合があります(アセンブリTextFieldParser
への参照を追加します)。Microsoft.VisualBasic
using Microsoft.VisualBasic.FileIO;
....
string[,] parsedCsv;
List<string[]> csvLines = new List<string[]>();
TextFieldParser parser = new TextFieldParser(new FileStream(guid.ToString(), FileMode.Open));
parser.Delimiters = new string[] { "," };
parser.TextFieldType = FieldType.Delimited;
int maxLines = 200, lineCount = 0;
try
{
while (!parser.EndOfData && lineCount++ < maxLines)
{
csvLines.Add(parser.ReadFields());
}
}
catch (MalformedLineException)
{
Console.WriteLine("Line Number: {0} Value: {1}", parser.ErrorLineNumber, parser.ErrorLine);
return;
}
parsedCsv = new string[csvLines.Count, csvLines[0].Length];
for (int i = 0; i < csvLines.Count; i++)
{
for (int j = 0; j < csvLines[i].Length; j++)
{
parsedCsv[i, j] = csvLines[i][j];
}
}
ここでは、出力が文字列の 2 次元配列になると想定しています。特に、各行が同じではない状況に対処する必要がある場合は、目的に応じてこのコードを調整する必要がある場合があります。フィールドの数 (可能性は低いかもしれませんが、それでも)。
本当に便利なのTextFieldParser
は、さまざまな種類の区切り記号に対応できることです。parser.Delimiters = new string[] { "\t" };
たとえば、 を設定すると、この同じコードでタブ区切りのテキストを解析できます。