Práce s TXT soubory, export dat do TXT/CSV |
Top Previous Next |
Seznam témat:
Načtení TXT souboru, setřídění, uložení Příklad skriptu se zeptá na textový soubor, načte jej, setřídí a uloží do souboru, na který se opět zeptá. Ve skriptu je rovněž vidět práce s jednotlivými řádky načteného textu podle zadaného číselného indexu.
var List: TStringList; Dlg: TOpenDialog; FName: string; begin //zeptej se na jméno zdrojového souboru -> FName Dlg := TOpenDialog.Create(nil); try Dlg.Title := 'Zvolte vstupní soubor'; Dlg.Filter := 'Textové soubory|*.txt'; if Dlg.Execute then FName := Dlg.FileName else Exit; finally Dlg.Free; end;
//setřiď seznam List := TStringList.Create; try List.LoadFromFile(FName); List.Sort;
ShowMessage('Setříděno.'); ShowMessage('První řádek: '+List.Strings[0]); ShowMessage('Poslední řádek: '+List.Strings[List.Count-1]);
//zeptej se na jméno cílového souboru a ulož seznam Dlg := TSaveDialog.Create(nil); try Dlg.Title := 'Zvolte výstupní soubor'; Dlg.Filter := 'Textové soubory|*.txt'; Dlg.DefaultExt := 'txt'; if Dlg.Execute then List.SaveToFile(Dlg.FileName); finally Dlg.Free; end; finally List.Free; end; end.
Export datové množiny do TXT / CSV Příklad ukazuje jak lze datovou množinu získanou dotazem SQL vyexportovat do textového souboru s oddělovačem.
var I: integer; S,Row: string; Qry: TQuery; Fld: TField; List: TStringList; SaveDlg: TSaveDialog; Progress: TProgress; begin //vytvoř řádkový seznam List := TStringList.Create; try Progress := TProgress.CreateSimple('Export', 'Probíhá export...'); try //vytvoř dataset podle dotazu SQL Qry := TQuery.Create(nil); try Qry.DatabaseName := DefaultDatabaseName; Qry.SQL.Add('select top 1000 * from dba.udokit'); Qry.Open;
//projdi dataset řádek po řádku while not Qry.Eof do begin Row := '';
//projdi všechna pole daného řádku a hodnoty naskládej do stringu for I := 0 to Qry.FieldCount-1 do begin Fld := Qry.Fields[I]; S := VarToCompatibleStr(Fld.Value);
//řetězcové a datumové hodnoty uzavři do uvozovek if not Fld.IsNull and (Fld.DataType in [ftString, ftDate, ftDateTime]) then S := '"'+S+'"';
Row := Row + S + ','; end;
//odstraň poslední čárku na konci Delete(Row, Length(Row), 1);
//přidej řádek do seznamu List.Add(Row);
//další Qry.Next; end; finally Qry.Free; end; finally Progress.Free; end;
//zeptej se na soubor a seznam ulož SaveDlg := TSaveDialog.Create(nil); try SaveDlg.Filter := 'Textové soubory|*.txt'; SaveDlg.DefaultExt := 'txt'; if SaveDlg.Execute then List.SaveToFile(SaveDlg.FileName); finally SaveDlg.Free; end; OKBox(Format('Export dokončen (počet záznamů: %d).', [List.Count])); finally List.Free; end; end.
Vytvoření TXT souboru v kódóvání unicode
const BOM = #$FF#$FE; //byte-order-mark (little endian) var Qry: TQuery; List: TWideStrings; S,OutputDir: string; FS: TFileStream; begin //zeptej se na cílový adresář OutputDir := SelectDirectory('', 'Cílový adresář'); if OutputDir <> '' then OutputDir := AddPathDelimiter(OutputDir) else Exit;
//vytvoř řádkový seznam (unicode) List := TWideStrings.Create; try //vytvoř dotaz pro procházení vybraných záznamu Qry := TQuery.Create(nil); try Qry.DatabaseName := DefaultDatabaseName; Qry.SQL.Add('select id_material, nazev'); Qry.SQL.Add('from dba.omater order by 1'); Qry.Open;
//řádek po řádku zformátuj a ulož do seznamu List while not Qry.Eof do begin S := '"'+Qry.FieldByName('id_material').AsString+'"'+ chr(9)+ //oddělovač TAB '"'+Qry.FieldByName('nazev').AsString+'"';
List.Add(S);
Qry.Next; end; finally Qry.Free; end;
//ulož seznam do souboru FS := TFileStream.Create(OutputDir+'sample.txt', fmCreate); try FS.Write(BOM, Length(BOM)); //na začátek přidej znak BOM List.SaveToStream(FS); finally FS.Free; end; finally List.Free; end; end.
Související témata |