似乎無法找到計算器這任何地方,所以這裏有雲:劃定格式
我有一個文件,我想發現無論是管道(|)或逗號(,)分隔。我還想知道文本限定符是否是一個引號(「)或者什麼都不是。任何人都有這樣做的C#函數?謝謝!
似乎無法找到計算器這任何地方,所以這裏有雲:劃定格式
我有一個文件,我想發現無論是管道(|)或逗號(,)分隔。我還想知道文本限定符是否是一個引號(「)或者什麼都不是。任何人都有這樣做的C#函數?謝謝!
對於這樣的文本分隔文件,我發現TextFieldParser是一個非常有用的工具。 (您可以導入visual basic dll以在C#應用程序中使用它)。
,我會用,根據你,因爲一般的策略有每個文件列固定數量,將選擇一個分隔符,繼續解析/讀取行,直到一條線比以前的一個不同的列數線。當發生這種情況切換到另一個分隔符(不知道你想要做什麼,如果兩者都無效)。如果在第一行中根本沒有找到分隔符,您可能還想要將分隔符丟棄。使用TextFieldParser
並將HasFieldEnclosedInQuotes設置爲true,您可以正確處理在引號中轉義的字段(如果不使用引號,它仍然可以正常工作)。這將是很多比嘗試使用常規字符串操作時手動處理引號更容易。
獲取第一行(或第二行,如果第一行是帶文件名的標題)。
然後你可以使用正則表達式來檢查可能的格式。即
Regex rePipesAndQualifier = ("[^|"]*"|);
如果rePipesAndQualifier.match(yourFileLine);
返回幾個非空場比賽,那麼你知道它使用管道作爲分隔符的有分隔符。
多做一些正則表達式來檢查逗號d無限制,有無限定符。
它取決於你期望得到的東西(所有分隔符,只有字符串分隔符)和你知道的東西(分隔符在開始和結束或僅在中間,字段的數目等等)。這就是爲什麼我不能給你一個確切的解決方案。
這是我的頭頂,並假設該文件具有相同數量的列,並且您有一個可能的分隔符的字符列表。
char[] delims = { '|', ',', ... };
取行的一個子集,或者如果整個文件足夠小,將它們存儲在一個字符串數組中。
string[] lines = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
遍歷分隔符,將使用分隔符拆分條目的數量爲整數數組:
int[] counts = lines.Select(s => s.Split(currentDelimiter).Length).ToArray();
使用自己的方法來查看所有的計數相等,並都大於1.您使用的分隔符是要使用的分隔符。
**發現**使用了什麼分隔符?你有什麼啓發式的想法? – Oded
基本上通過一個字符串進行搜索,並嘗試解析它並將分隔符放入某個字符或字符串中 – Badmiral
您是否知道有關數據的任何信息,例如每行的項目數? – Servy