2015-08-03 59 views
1

我有一個CSV文件,我讀入並通過寫出每列的逗號分隔值將其轉換爲TXT文件。我希望程序也能夠將TXT文件轉換回CSV,因此我創建了一個TXTReader類。我在閱讀大型TXT文件時遇到麻煩。我第一次嘗試使用它String.Split更快地分割txt文件

string fullText = File.ReadAllText(fileName); 
string[] values = fullText.Split(','); 

這個工作在第一,但開始引起問題時,用繩子在他們有逗號列露面,使得程序認爲這是另一列,而這只是一個字符串。我繼續尋找解決方案,並找到了https://stackoverflow.com/a/3147901/1870760。這適用於小文件,但對於我的31 MB TXT文件非常慢。然後我試着用自己的黑客方式遍歷fullText中的所有字符並檢查"\"",因爲所有字符串在TXT中都包含引號,但這也需要很長時間(~10分鐘)。 我也不能使用https://stackoverflow.com/a/3148691/1870760,因爲我的字符串列值有時包含\n這會導致讀者認爲這是一個新行,事實並非如此。

那麼,我是否必須接受一段時間才能閱讀31 MB TXT文件並將這些值拆分爲列或者是否有更多性能高效的方法來執行此操作?

+0

一個簡單的事情,你可以做的事情是加速使用RegexOptions.Compiled。其他的東西包括,得到一個更快的正則表達式查詢(可能不是真的可能),使用線程。 – Vajura

+2

'TextFieldParser'處理所有 - [在C#中解析逗號分隔的字符串併發症](http://stackoverflow.com/questions/30078054/parse-comma-seperated-string-with-compression-in- c-sharp) –

+0

@AlexK。正如問題所述,我不能使用'TextFieldParser',因爲它讀取每個換行符的值,而我的字符串可以包含'\ n'。 –

回答

0

有一個項目,據說csv閱讀/分裂比內存使用率低的正則表達式要快15倍。如果您想稍後顯示數據,則即使數據綁定也受支持。來源可用。

您可以自定義許多參數(包括換行選項),因此我假設它足夠智能以處理您的值\n,它明確處理參數值中的逗號。

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader