文字格式做交換 |
答題得分者是:小傑克
|
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
前輩們好,小弟有一個已經利用TStringLilst讀檔並分割完資料了,資料如下
採購單號: P9701001 供 應 商: 4110 01 E10-1651-0 AS27.5溫度開關KA-313 個 100.0 385.0 38,500.0 97/01/25 採購單號: P9701002 供 應 商: 4115 01 E10-1122-1 AF08 溫度開關1/220特 個 1,000.0 27.3 27,300.0 97/02/29 02 E10-1341-1 BF33 溫度開關3/220特 個 500.0 38.6 19,300.0 97/02/29 03 E10-1074-1 AL05 溫度開關3/380特 個 500.0 30.5 15,250.0 97/02/29 採購單號: P9701003 供 應 商: 4317 01 E01-2040-4 2*4芯 VCT電纜外12m/m M 5,000.0 32.8 164,000.0 96/12/28 02 E01-2040-3 2*4芯HVCT電纜外12m/m M 5,000.0 33.8 169,000.0 96/12/28 03 E01-1240-4 1.25*4芯 外徑9.5 M 5,000.0 21.0 105,000.0 96/12/28 現在我想要把裡面格式換成如下 採購單號: P9701001 供 應 商: 4110 01 E10-1651-0 AS27.5溫度開關KA-313 個 100.0 385.0 38,500.0 97/01/25 採購單號: P9701002 供 應 商: 4115 01 E10-1122-1 AF08 溫度開關1/220特 個 1,000.0 27.3 27,300.0 97/02/29 02 E10-1341-1 BF33 溫度開關3/220特 個 500.0 38.6 19,300.0 97/02/29 03 E10-1074-1 AL05 溫度開關3/380特 個 500.0 30.5 15,250.0 97/02/29 採購單號: P9701003 供 應 商: 4317 01 E01-2040-4 2*4芯 VCT電纜外12m/m M 5,000.0 32.8 164,000.0 96/12/28 02 E01-2040-3 2*4芯HVCT電纜外12m/m M 5,000.0 33.8 169,000.0 96/12/28 03 E01-1240-4 1.25*4芯 外徑9.5 M 5,000.0 21.0 105,000.0 96/12/28 之前我是寫入資料庫之後再轉成文字檔,現在我是只想要資料讀進來做完切割並擷取想要資料後,再另存一個新檔就可以了 直接就做資料格式交換的動作,不用再像我之前一樣先寫入資料庫取得格式後再轉回文字檔這樣子。 不曉得各位前輩們有什麼比較好的方法呢?!我知道我之前方法比較笨啦~不過也是剛好可以拿來再做另一隻查詢程式用才做的^^" |
goat
高階會員 發表:53 回覆:130 積分:134 註冊:2002-06-03 發送簡訊給我 |
|
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
這是很單純很單純的文字換位置而已, 需要的是苦力 , 大概沒什麼神奇方法吧
既然已經有辦法把文字資料轉入資料庫, 文字處理的能力應該也很ok. 不知您想要的方法 是什麼樣的功能?或者說具備怎樣的功能? (動態調整, 智慧容錯.......等) ps:在delphi 的help 中有一類 string handling routines ,裡面有文字處理需要的差不多全部的funciton 把這邊功能瀏覽一遍, 應該可以找到適用的功能 Pos, Copy , Left , StringOdChar , StuffString ...等等
------
額有朝天骨,眼中有靈光 |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
而就目前樣式看來, 如果格式這麼的一致的話, 可能回答問題的時間會比寫程式還要長
比如說 var index:integer; sl : TStringList; sl:=tstringList.Create; sl.loadfromfile ('檔名'); index := 0; while index < sl.Count do begin if Copy( sl.String[index],1,1) = '採' then begin sl.String[index] := sl.String[index] ' ' sl.String[index 1] ; sl.delete (index 1); end else begin sl.string[index] := stringofchar (' ', 20 ) sl.string[index] ; //看有幾個空白 end; inc( index ); end; sl.SaveToFile ('目的檔名'); sl.free; 應該差不多是這樣
------
額有朝天骨,眼中有靈光 |
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
我的偷懶方法 ( 假設資料放在 mylist ) mylist.text := stringreplace(stringreplace(mylist.text, #13#10'01 ', ' 01 ', [rfreplaceall]), #13#10'0', #13#10 stringofchar(' ',43) '0',[rfreplaceall]); 分兩段可能會比較清楚: astr := stringreplace(mylist.text, #13#10'01 ', ' 01 ', [rfreplaceall]); // 把 01 開頭的列連到上一列 mylist.text :=stringreplace(astr, #13#10'0', #13#10 stringofchar(' ',43) '0',[rfreplaceall]); // 所有 0 開頭的列 前加空格 沒實測, 參考一下. 請注意各字串中的空格
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |