DataSet 儲存成 txt/csv/xls 簡單程序 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
只要傳入 任何 dataset, 檔案名稱, 及各欄位之間之甚麼分隔,就可將該 dataset 內的數據存入 文字檔/csv/Excel 可讀格式。 Dataset 可以是 TTable, TQuery, TClientDataSet, 各種 ADO dataset, 總之是 TDataSet 的子代便可。 Filename 就是檔案名啦 Delimiter 就是分隔字元,CSV 用 ',', xls 最好用 #9 (即 tab),txt 用你喜觀的就好。 本程序會將所有 tab 及換行變成空白字元以免和記錄/欄位分格混淆。 本程序支援 memo 但不支援任何 binary field 包括圖像。
procedure SaveDataSet(TT : TDataSet; FileName, Delimiter : String); var i : integer; line : string; M : TStringList; begin TT.Active := true; TT.First; M := TStringList.Create; Line := TT.Fields[0].DisplayName; For i := 1 to TT.FieldCount -1 do Line := Line Delimiter TT.Fields[i].DisplayLabel; M.Add(Line); while not TT.Eof do begin Line := TT.Fields[0].AsString; For i := 1 to TT.FieldCount -1 do Line := Line Delimiter StringReplace(StringReplace(TT.Fields[i].AsString, #13#10,' ',[rfReplaceAll]),#9,' ',[rfReplaceAll]) M.Add(Line); TT.Next; end; M.SaveToFile(FileName); end;若有任何改善見議或有其他更好程序請分享謝謝。 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
1. BDE Text Driver
The text driver allows BDE clients to access text files. The text driver allows BDE clients to access text data directly without first importing into a table format. By using this driver, the application developer can build a more efficient import/export utility. Filters can be set on the cursors that are opened on the text files to import/export only those records that satisfy the filter's criteria. 2. ...Delphi6\Demo\DB\TextData\textpkg.dpk -> TTextDataSet Component. 也可達到類似功能, 參考看看 ... /*
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
ry_lee
高階會員 發表:368 回覆:251 積分:123 註冊:2002-03-19 發送簡訊給我 |
引言: 只要傳入 任何 dataset, 檔案名稱, 及各欄位之間之甚麼分隔,就可將該 dataset 內的數據存入 文字檔/csv/Excel 可讀格式。 Dataset 可以是 TTable, TQuery, TClientDataSet, 各種 ADO dataset, 總之是 TDataSet 的子代便可。 Filename 就是檔案名啦 Delimiter 就是分隔字元,CSV 用 ',', xls 最好用 #9 (即 tab),txt 用你喜觀的就好。 本程序會將所有 tab 及換行變成空白字元以免和記錄/欄位分格混淆。 本程序支援 memo 但不支援任何 binary field 包括圖像。版主你好: 我不了解這段程式碼之目的,可否詳述. Line := Line Delimiter StringReplace(StringReplace(TT.Fields[i].AsString, #13#10,' ',[rfReplaceAll]),#9,' ',[rfReplaceAll])procedure SaveDataSet(TT : TDataSet; FileName, Delimiter : String); var i : integer; line : string; M : TStringList; begin TT.Active := true; TT.First; M := TStringList.Create; Line := TT.Fields[0].DisplayName; For i := 1 to TT.FieldCount -1 do Line := Line Delimiter TT.Fields[i].DisplayLabel; M.Add(Line); while not TT.Eof do begin Line := TT.Fields[0].AsString; For i := 1 to TT.FieldCount -1 do Line := Line Delimiter StringReplace(StringReplace(TT.Fields[i].AsString, #13#10,' ',[rfReplaceAll]),#9,' ',[rfReplaceAll]) M.Add(Line); TT.Next; end; M.SaveToFile(FileName); end;若有任何改善見議或有其他更好程序請分享謝謝。 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
V8
一般會員 發表:1 回覆:1 積分:0 註冊:2003-05-02 發送簡訊給我 |
|
gaui
一般會員 發表:25 回覆:36 積分:12 註冊:2004-06-11 發送簡訊給我 |
|
jhlin88
一般會員 發表:21 回覆:28 積分:9 註冊:2002-10-17 發送簡訊給我 |
|
bennykyp
一般會員 發表:11 回覆:31 積分:8 註冊:2004-10-21 發送簡訊給我 |
引言: 能否将分隔符改为“|”? 我为这个问题苦恼了很久了。 procedure Button1Click(Sender: TObject); var TestView, Delimiter : String; s : TStringList; I : Integer; begin Delimiter := '|'; s := TStringList.Create; s.LoadFromFile('C:\'abc.txt'); For I := 0 to Pred(s.Count) do begin TestView := StringReplace(s.Strings[I], #13#10, ' ', [rfReplaceAll]); TestView := TestView Delimiter StringReplace(s.Strings[I], #13#10, ' ', [rfReplaceAll]); End; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |