使用Microsoft.VisualBasic.FileIO.TextFieldParser
類。這將處理解析分隔文件TextReader
或Stream
,其中一些字段用引號括起來,而另一些則不用。
例如:
using Microsoft.VisualBasic.FileIO;
string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34";
TextFieldParser parser = new TextFieldParser(new StringReader(csv));
// You can also read from a file
// TextFieldParser parser = new TextFieldParser("mycsvfile.csv");
parser.HasFieldsEnclosedInQuotes = true;
parser.SetDelimiters(",");
string[] fields;
while (!parser.EndOfData)
{
fields = parser.ReadFields();
foreach (string field in fields)
{
Console.WriteLine(field);
}
}
parser.Close();
這應該導致下面的輸出:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
更多信息參見Microsoft.VisualBasic.FileIO.TextFieldParser。
您需要在添加引用.NET選項卡中添加對Microsoft.VisualBasic
的引用。
來源
2011-07-01 03:51:37
Tim
雖然在Java中,類似的問題:http://stackoverflow.com/questions/1757065/java-splitting-a-comma-separated-string-but-ignoring-commas-in - 引用 –
@saugok,對不起,先生,不是。 – q0987
使用正則表達式來做到這一點是不好的建議。 .NET Framework已經內置了對解析CSV的支持。看到這個答案是你應該接受的答案。否則,我會關閉這是一個愚蠢的http://stackoverflow.com/questions/3147836/c-regex-split-commas-outside-quotes這是同樣錯誤。 – Kev