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

拿掉空白的欄位

答題得分者是:christie
l730626
一般會員


發表:22
回覆:21
積分:8
註冊:2009-03-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-02 15:56:33 IP:140.127.xxx.xxx 訂閱
這是利用TXT轉檔到ACCESS DB的程式

以下是TXT檔的內容~


Item L/T Cost FL/MOQ O/H Rcv Qty
--------------- ------ ------ -------- ------- -------
60 001001 00 10 0 N/A 0 0
<60-010200-00>


這是我的程式碼~
procedure TForm3.BitBtn1Click(Sender: TObject);
Var
TF:textfile;
L,M: TStringList;
mylist : tstringlist;//
str,filepath,str2,S :string;
s0,s1,s2,s3,s4,s5,s6,s7,:string;
i,j,k :Integer;
ii :Integer;
begin
DM1.ADOCommand1.CommandText:='delete from data';
DM1.ADOCommand1.Execute;
i:=0;
k:=0;
if self.FileListBox1.Count=0 then
begin
showmessage('請選擇一個.Txt檔');
exit;
end;
for i:=0 to self.FileListBox1.Count-1 do
begin
j:=0;
self.FileListBox1.ItemIndex:=i;
filepath:=self.FileListBox1.FileName;
Assignfile(TF,filepath);
reset(TF);
WHILE not EOF(TF) DO
begin
ReadLn(TF,str);
s1 := trim(copy(str,2,15));
s2 := trim(copy(str,18,12));
s3 := trim(copy(str,31,4));
s4 := trim(copy(str,36,6));
s5 := trim(copy(str,45,7));
s6 := trim(copy(str,53,7));
s7 := trim(copy(str,61,8));
s8 := trim(copy(str,70,11));
s9 := trim(copy(str,82,204));
begin
if (trim(copy(s1,1,1))='<') or (trim(copy(s1,1,1))= '(' ) and (j=0) then
begin
str2:='insert into data (Item)';
str2:=str2 ' values(''' s1 ''')';
DM1.ADOCommand1.CommandText:=str2;
DM1.ADOCommand1.Execute;
{ DM1. adoq1.Close;
DM1. adoq1.Open;
DM1. adoq1.Append;
DM1. adoq1.fieldByNAme('Item').asstring:=s1;
DM1. adoq1.Post;}
end;
end;
begin
if (s8='Requirement') and (j=0) then
begin
str2:='insert into data (Item ,L/T ,Cost,FL/MOQ ,O/H,Rcv Qty )';
str2:=str2 ' values(''' s1 ''',''' s2 ''',''' s3 ''',''' s4 ''',''' s5 ''',''' s6 ''',''' s7 ''')';
begin
DM1.ADOCommand1.CommandText:=str2;
DM1.ADOCommand1.Execute;
{ DM1. adoq1.Close;
DM1. adoq1.Open;
DM1. adoq1.Append;
DM1. adoq1.FieldByName('Item ').asstring := s1;
DM1.adoq1.FieldByName('L/T').AsString := s3;
DM1.adoq1.FieldByName('Cost').asstring := s4;
DM1. adoq1.fieldbyname('FL/MOQ ').Asstring := s5;
DM1. adoq1.FieldByName('O/H').AsString := s6;
DM1. adoq1.FieldByName('O/H,Rcv Qty').AsString := s7;
DM1. adoq1.Post;}
end;
end;
end;
closefile(TF);
DM1.adoq1.Close;
DM1.adoq1.Open;
showmessage('轉檔作業完');
end;
FORM3.CLOSE;
end;
end.

以下是執行的結果
Item Item(2) L/T CostFL/MOQ O/HRcv Qty
60 001001 00 <60-010200-00> 10 0 N/A 00



st33chen
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-02 21:12:14 IP:122.116.xxx.xxx 未訂閱
您好,

假如 txt 中每兩列就是要填入 db 的一筆, 那就每讀入兩列 txt, db 所需的欄位都到齊了才 insert 一筆
不需每讀入一列 txt 就 insert 一筆.

我的意思是 txt 的內容如下
Item L/T Cost FL/MOQ O/H Rcv Qty
--------------- ------ ------ -------- ------- -------
60 001001 00 10 0 N/A 0 0
<60-010200-00>
61 001001 00 10 0 N/A 0 0
<61-010200-00>
62 001001 00 10 0 N/A 0 0
<62-010200-00>


紅色部份是我假設的
如果不是這樣, 那要請您多提供一些 txt 檔的 sample
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-04-02 21:13:06, 註解 無‧
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-03 09:55:14 IP:59.125.xxx.xxx 未訂閱
拆字串你可試試這個
{******************************************************
function skuGetTokens(s:string; separators: TSKUSeparator): TStringList;
Parses a string to get the tokens separated by any of a set
of separator characters. The tokens are returned in a
TStringList object which the caller needs to free after use.
Note: The caller must free the returned TStringList object
after use.
Example:
var
tokens: TStringList;
begin
tokens := skuGetTokens('parse, gettoken, utility',[' ',',']);
...use the tokens...
...tokens[0] will have 'parse'
...tokens[1] will have 'gettoken'
...tokens[2] will have 'utility'
tokens.free;
Tip: A token itself can be parsed further to get another list of
tokens and so on.
******************************************************}
type
TSKUSeparator = set of char;
function skuGetTokens(s:string; separators: TSKUSeparator): TStringList;
var
slist: TStringList;
test, token: string;
begin
slist := TStringList.create;
test := s;
result := slist;
while (Length(Test)>0) do
begin
//delete initial space
while (Length(Test)>0) and (test[1] in separators) do
Delete(test,1,1);
if (Length(Test)=0) then
exit;
token := '';
while (Length(Test)>0) and (not (test[1] in separators)) do
begin
token := token test[1];
Delete(test,1,1);
end;
slist.add(token);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
tokens:TStringList;
begin
S:='60 001001 00 10 0 N/A 0 0';
tokens := skuGetTokens(s,[' ',',']);
SHOWMESSAGE(tokens[0] '____' tokens[1] '____' tokens[2] '____' tokens[3] '____' tokens[4] '____' tokens[5]);

S:='<60-010200-00>';
tokens := skuGetTokens(s,[' ',',']);
SHOWMESSAGE(tokens[0])
end;
------
What do we live for if not to make life less difficult for each other?
系統時間:2024-05-03 9:26:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!