你好,我有一個解析CSV文件的問題。 CSV文件使用|分隔性格。到現在爲止還挺好。但是,只有一個字段是封閉的「字符。 例如用TextFieldParser解析Mixedt CSV文件
field1|field2|"field3"|field4
當我設置
HasFieldsEnclosedInQuotes
爲true,我會成爲一個例外,否則解析CSV文件出錯了,你能幫我嗎
你好,我有一個解析CSV文件的問題。 CSV文件使用|分隔性格。到現在爲止還挺好。但是,只有一個字段是封閉的「字符。 例如用TextFieldParser解析Mixedt CSV文件
field1|field2|"field3"|field4
當我設置
HasFieldsEnclosedInQuotes
爲true,我會成爲一個例外,否則解析CSV文件出錯了,你能幫我嗎
快速和骯髒:你可以考慮剝離文件事先「的所有用途。
string path = "c:\\test.txt";
string s = System.IO.File.ReadAllText(path, System.Text.Encoding.Default);
s = s.Replace("\"", string.Empty);
System.IO.File.WriteAllText(path, s, System.Text.Encoding.Default);
編輯1: 此方法適用於數列或只含一個字串列,但可以打破在其他情況下,您的CSV結構(例如字段存儲HTML內容) - 注意可能的副作用。
是不是解決方案。在Field3中有HTML代碼,其中包含「 – user332070
WAT?你確定你知道CSV中的引號角色嗎? –
@ taras.roshko:是的,我是。 我同意 - 不適合html內容。 我認爲down投票是不公平的這種簡單的方法已經足夠我多次 – HikeMike
我還沒有看到一種文化,其中「|」是CSV分隔...
總而言之,
var line = "field1|field2|\"field3\"|field4";
var pattern = string.Format("{0}(?=([^\"]*\"[^\"]*\")*[^\"]*$)", Regex.Escape("|"));
//{0} in pattern is CSV separator. To get current use System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator
var splitted = Regex.Split(line, pattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture);
foreach (var s in splitted)
Console.WriteLine(s);
輸出:
field1
field2
"field3"
field4
圖案設計成單行使用指定的分隔符的CSV文件拆分。包括處理報價等。 希望能幫助你。
看到我的答案,測試代碼爲您的輸入,按預期工作 –