2012-05-07 51 views
0

似乎無法找到計算器這任何地方,所以這裏有雲:劃定格式

我有一個文件,我想發現無論是管道(|)或逗號(,)分隔。我還想知道文本限定符是否是一個引號(「)或者什麼都不是。任何人都有這樣做的C#函數?謝謝!

+4

**發現**使用了什麼分隔符?你有什麼啓發式的想法? – Oded

+0

基本上通過一個字符串進行搜索,並嘗試解析它並將分隔符放入某個字符或字符串中 – Badmiral

+1

您是否知道有關數據的任何信息,例如每行的項目數? – Servy

回答

1

對於這樣的文本分隔文件,我發現TextFieldParser是一個非常有用的工具。 (您可以導入visual basic dll以在C#應用程序中使用它)。

,我會用,根據你,因爲一般的策略有每個文件列固定數量,將選擇一個分隔符,繼續解析/讀取行,直到一條線比以前的一個不同的列數線。當發生這種情況切換到另一個分隔符(不知道你想要做什麼,如果兩者都無效)。如果在第一行中根本沒有找到分隔符,您可能還想要將分隔符丟棄。使用TextFieldParser並將HasFieldEnclosedInQuotes設置爲true,您可以正確處理在引號中轉義的字段(如果不使用引號,它仍然可以正常工作)。這將是很多比嘗試使用常規字符串操作時手動處理引號更容易。

0

獲取第一行(或第二行,如果第一行是帶文件名的標題)。

然後你可以使用正則表達式來檢查可能的格式。即

Regex rePipesAndQualifier = ("[^|"]*"|); 

如果rePipesAndQualifier.match(yourFileLine);返回幾個非空場比賽,那麼你知道它使用管道作爲分隔符的有分隔符。

多做一些正則表達式來檢查逗號d無限制,有無限定符。

它取決於你期望得到的東西(所有分隔符,只有字符串分隔符)和你知道的東西(分隔符在開始和結束或僅在中間,字段的數目等等)。這就是爲什麼我不能給你一個確切的解決方案。

+2

管道分隔的文件可以包含帶逗號的字段,而逗號分隔的文件可以包含帶管道的字段。任何一個[單獨]的存在都不會告訴你。 – Servy

+0

如果可以混合使用所有東西,並且沒有遊戲中的信息,請使用水晶球。嚴重的是,你必須事先知道一些事情。 – JotaBe

+2

是的,這就是爲什麼我們詢問OP他知道什麼,或者他想以什麼爲基礎做出決定,而不是僅僅挑選我們自己不知道的東西會起作用。 – Servy

1

這是我的頭頂,並假設該文件具有相同數量的列,並且您有一個可能的分隔符的字符列表。

char[] delims = { '|', ',', ... }; 

取行的一個子集,或者如果整個文件足夠小,將它們存儲在一個字符串數組中。

string[] lines = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); 

遍歷分隔符,將使用分隔符拆分條目的數量爲整數數組:

int[] counts = lines.Select(s => s.Split(currentDelimiter).Length).ToArray(); 

使用自己的方法來查看所有的計數相等,並都大於1.您使用的分隔符是要使用的分隔符。

+0

那裏有太多的假設。 OP沒有給出足夠詳細的答案來制定 - 只是猜測。 – Oded

+0

許多逗號/管道分隔的列表在每行中的項目數不會相同,並且還需要考慮到一些分隔符可能位於字符串限定符內部,這對您的計數會產生問題。 – Servy

+0

好點,@Servy。這可能是http://stackoverflow.com/questions/761932/how-should-i-detect-which-delimiter-is-used-in-a-text-file的副本 –