解析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-d陣列 - 你可能需要根據你所追求的調整這個代碼,特別是如果你要應付的情況每行不具有相同數量的字段(可能不太可能,但仍然)。
關於TextFieldParser
真正有用的事情是,它會應付不同種類的定界符。例如,通過設置parser.Delimiters = new string[] { "\t" };
,此相同的代碼可以解析製表符分隔的文本。
你可以通過從VisualBasis.Net程序集中「借用」一個很好的實現來作弊:http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx – rene
如果你要小心,自己動手,csv文件中有一些特殊字符。 –