Práce s TXT soubory, export dat do TXT/CSV

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

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