如何把資料分開 !? |
答題得分者是:Coffee
|
UB
一般會員 發表:18 回覆:19 積分:7 註冊:2007-02-19 發送簡訊給我 |
小弟今天的問題在這邊不曉得找不找的到答案,因為這個問題和 Delphi 基本上沒有什麼太大的關聯,不過還是很希望能夠找到可以幫我的大大 ~
我有一個銷售的檔案,他是一個 txt 檔,每天我都必須把txt檔案裡面的資料分析過,然後塞到資料庫裡面(mysql),其實基本上都已經完成了,可是有一些小小的問題,就是這個txt檔案其實資料並不是很一致化,不過大部分都有一致,這個txt檔案的內容大概是如下面: 代碼 名稱 日期 進價 賣價 進貨量 銷售量 庫存量 1102 豆芽 960318 3.25 9.00 100 97 6 1103 菠菜 960318 5.50 12.00 60 57 4 1355 可口可樂 960318 23 32 10000 7524 6005 1355A 可口可樂 櫻桃 960318 22 32 2000 408 5410 3152 魚 缸 960318 145 350 30 5 27 3511 螢幕 A級 960318 3200 4800 10 2 15 4700 電池 2號 960318 7.50 20 120 94 60 基本上txt的內容大概像是上面的那樣子,有幾個重點: 1.基本上一列都是八個欄位。 2.除了代碼和名稱之外其他的資料都是數字的 3.代碼絕大部分都是數字,可是也有少部份是數字和英文字混合的,也有只有英文字的。 4.名稱方面比較糟糕,例如『魚缸』這個東西,他的名稱中間就夾帶了空白,有時候夾帶數字,有時候夾帶英文字,有時候全部混著。 我的作法是: 1.把檔案讀近來 2.while not eof(xx) do 把一列一列用 readln 讀進一個字串 3.把這個字串的資料一個一個分開(問題就是出在這裡了),我在 ktop 裡面搜尋了好久,終於找到一個可以用的方法(如下),然後再把TStringList 裡面的東西用 for 一個一個讀出來,加上 if 作基本的判斷,然後把資料讀進去 data:array[0..7] of string 裡面。 function SplitString(S, Delimiter: string): TStringList; begin // 分割字串 Result := TStringList.Create; Result.Text := StringReplace(S, Delimiter, #13, [rfReplaceAll]); end; (對不起,我真的很想把原來的出處也連結近來,對作者表示尊重,可是我剛剛努力的在重新找過,真的找不到原來的文章了,但是我確定是ktop 的大大做的程式碼) 這個方法有個問題就是,例如『魚 缸』這個東西,他中間有空格,所以他分成了兩行,也就是資料就會亂掉了。 所以我又換了另一個作法,就是用 regular expression 來把資料分開 基本上我的問題就是.... 這個的regular expression 該怎麼寫才可以,因為他有中文字在裡面,我對於 regular expression 也是新手,昨天讀了一整天關於這類的資料,還不是很熟悉,不過我目前可以用最簡單的 regular expression 把所有的數字抓出來,但還是有一堆的問題,真的要請教各位大大,這個的regular expression 該如何作 !! ps. 我用的是 DIRegEx 的 好像是 perl 的語法,他還寫什麼PCRE 我就不清楚那代表什麼了。 ps. 我目前的作法是在塞進去資料庫之前把全部的資料完整的檢查一次,如果資料沒有問題的話就塞進去,如果有問題的話就紀錄下來然後存成錯誤的log檔案,然後準備用人工慢慢修,可是....這個方法真的很笨,因為除了星期六日休息之外,其他每天都有一個這樣子的檔案,而每天都有5000多筆資料要跑,基本上出錯的資料每個檔案平均大概有將近100筆,所以..... 我把問題簡化一下,就是要把上面(藍色部份)的資料分開的話,regular experssion 該怎麼寫 (該注意的重點我已經用紅色標出來了)!? 編輯記錄
Coffee 重新編輯於 2008-01-08 10:41:55, 註解 修改分類為問題‧
|
Coffee
版主 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
|
UB
一般會員 發表:18 回覆:19 積分:7 註冊:2007-02-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |