2013-04-01 38 views
0

你好,我有一個解析CSV文件的問題。 CSV文件使用|分隔性格。到現在爲止還挺好。但是,只有一個字段是封閉的「字符。 例如用TextFieldParser解析Mixedt CSV文件

field1|field2|"field3"|field4 

當我設置

HasFieldsEnclosedInQuotes

爲true,我會成爲一個例外,否則解析CSV文件出錯了,你能幫我嗎

+0

看到我的答案,測試代碼爲您的輸入,按預期工作 –

回答

-2

快速和骯髒:你可以考慮剝離文件事先「的所有用途。

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內容) - 注意可能的副作用。

+0

是不是解決方案。在Field3中有HTML代碼,其中包含「 – user332070

+0

WAT?你確定你知道CSV中的引號角色嗎? –

+0

@ taras.roshko:是的,我是。 我同意 - 不適合html內容。 我認爲down投票是不公平的這種簡單的方法已經足夠我多次 – HikeMike

0

我還沒有看到一種文化,其中「|」是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文件拆分。包括處理報價等。 希望能幫助你。