全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2007
推到 Plurk!
推到 Facebook!

文字格式做交換

答題得分者是:小傑克
zoezoe
一般會員


發表:10
回覆:25
積分:12
註冊:2009-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-04 14:19:08 IP:60.248.xxx.xxx 訂閱
前輩們好,小弟有一個已經利用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

之前我是寫入資料庫之後再轉成文字檔,現在我是只想要資料讀進來做完切割並擷取想要資料後,再另存一個新檔就可以了
直接就做資料格式交換的動作,不用再像我之前一樣先寫入資料庫取得格式後再轉回文字檔這樣子。
不曉得各位前輩們有什麼比較好的方法呢?!我知道我之前方法比較笨啦~不過也是剛好可以拿來再做另一隻查詢程式用才做的^^"
編輯記錄
zoezoe 重新編輯於 2009-05-04 14:20:25, 註解 無‧
zoezoe 重新編輯於 2009-05-04 14:20:44, 註解 無‧
zoezoe 重新編輯於 2009-05-04 14:21:25, 註解 無‧
goat
高階會員


發表:53
回覆:130
積分:134
註冊:2002-06-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-04 17:07:08 IP:203.160.xxx.xxx 未訂閱
你的資料有分表頭表身,如果不想要寫到資料庫,建議你就放在Memory Table裡面去處裡吧!

讀取文字檔→處裡→寫入Memory Table→處裡→匯出你要格式。
zoezoe
一般會員


發表:10
回覆:25
積分:12
註冊:2009-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-04 17:16:06 IP:60.248.xxx.xxx 訂閱
嗯哼~這個方法的確可行!其實跟寫入資料庫差不多

因為就是要去讀DBGrid裡面的格式嘛~方法不錯,可以來試試^^"

還有沒有前輩有其他的方法呢?分享一下~
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-04 17:16:46 IP:59.112.xxx.xxx 訂閱
這是很單純很單純的文字換位置而已, 需要的是苦力 , 大概沒什麼神奇方法吧
既然已經有辦法把文字資料轉入資料庫, 文字處理的能力應該也很ok. 不知您想要的方法
是什麼樣的功能?或者說具備怎樣的功能? (動態調整, 智慧容錯.......等)

ps:在delphi 的help 中有一類 string handling routines ,裡面有文字處理需要的差不多全部的funciton
把這邊功能瀏覽一遍, 應該可以找到適用的功能 Pos, Copy , Left , StringOdChar , StuffString ...等等
------
額有朝天骨,眼中有靈光
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-04 17:35:55 IP:59.112.xxx.xxx 訂閱
而就目前樣式看來, 如果格式這麼的一致的話,  可能回答問題的時間會比寫程式還要長

比如說
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-04 17:39:36 IP:60.248.xxx.xxx 訂閱
被小傑克前輩發現了我想偷懶的地方了~>"<
你說得一點都沒有錯,要換位置真的需要很多苦力
才會在這裡問問前輩們有沒有簡便點的程式碼可以讓上述條件成立
上一位前輩的方法其實就跟我之前寫的差不多啦~謝謝前輩指導^^"
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-04 22:49:34 IP:122.116.xxx.xxx 未訂閱
您好,

我的偷懶方法 ( 假設資料放在 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 (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-05-05 08:26:41, 註解 無‧
st33chen 重新編輯於 2009-05-05 08:27:44, 註解 無‧
st33chen 重新編輯於 2009-05-05 08:28:29, 註解 無‧
st33chen 重新編輯於 2009-05-05 08:31:17, 註解 無‧
st33chen 重新編輯於 2009-05-05 08:40:41, 註解 無‧
zoezoe
一般會員


發表:10
回覆:25
積分:12
註冊:2009-04-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-05-05 08:48:42 IP:60.248.xxx.xxx 訂閱
謝了各位前輩們,小弟已經完成了
前輩們使用的方法都很不錯也很簡便,但是昨天想了想還是慢慢搬好了
至少自己現在的想法是這樣子~慢慢進步也會跟追上前輩們的腳步^^"
發這篇只是想要一起分享大家的作法而已~謝謝各位了
系統時間:2024-04-27 7:51:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!