我想解析純文本格式的表。該程序使用C#編寫在Visual Studio中。我需要解析表格並將數據插入到數據庫中。解析純文本表
下面是一個示例表我將在被讀取:
ID Name Value1 Value2 Value3 Value4 //header
1 nameA 3.0 0.2 2 6.2
2 nameB
3 nameC 2.9 3.0 7.3
4 nameD 1.5 3.0 1.8 1.1
5 nameE
6 nameF 1.2 2.4 3.3 2.5
7 nameG 3.0 3.2 2.1 4.5
8 nameH 88 12.4 28.9
在示例中,我將需要捕獲數據以ID 1,3,4,6,7,和8
我想到了兩種方法來解決這個問題,但他們都沒有100%的工作。
方法1:
通過在頭部讀書,我可以得到每列的起始索引。然後我將使用Substring
收集每行的數據。
ISSUE:一旦它經過某一行(我不知道什麼時候發生這種情況),列移位,並且Substring
將不再收集正確的數據。
此方法只收集正確的數據爲1,3和4。
方法2:
使用Regex
收集所有的匹配。我希望這可以按此順序收集ID,名稱,值1,值2,值3,值4。
我的模式是(\d*?)\s\s\s+(.*?)\s\s\s+(\d*\.*\d*)\s\s\s+(\d*\.*\d*)\s\s\s+(\d*\.*\d*)\s\s\s+(\d*\.*\d*)
問題,即收集一些行被左移數據。例如,在ID 3上,Value2
應該爲空,但正則表達式將爲Value2 = 3.0
,Value3 = 7.3
和Value4 = blank
。同樣的問題也發生在ID 8
問:
我怎樣才能在全表中讀取並正確解析它們?
(1)我不知道開始從該行的值將被轉移並
(2)我不知道有多少細胞會通過,如果它們是一致的移動。
其他信息
表爲PDF文件,我轉換PDF到文本文件,這樣我就可以在數據讀取方面。移動數據發生在一張表跨越多個頁面時,但不一致。
編輯
下面是一些實際的數據:
68 BENZYL ALCOHOL 6.0 0.4 1 7.4
91 EVERNIA PRUNASTRI (OAK MOSS) 34 3 3 10
22 test 2323 23 12
值是否有空格? – dognose
表中是否有空格('')?如果不是的話,你可以只讀一行,並在所有空格處拆分並排除所有空字符串 – coolerfarmer
@coolerfarmer認爲相同 - 但不起作用,因爲可能有空單元格。所以你不知道如何在4列上分配3個值。 (除非你建立一些容易出錯的邏輯,通過計算兩者之間的空格來確定它。) – dognose