拿掉空白的欄位 |
答題得分者是:christie
|
l730626
一般會員 發表:22 回覆:21 積分:8 註冊:2009-03-29 發送簡訊給我 |
這是利用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. 以下是執行的結果
| ||||||||||||||||||||||||||||
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
假如 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 發送簡訊給我 |
拆字串你可試試這個
{****************************************************** 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? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |