PROCEDURE datasetToTextFile(ds : TDataSet; nomFichier : string;separateur : string = ';'; delimiteur : char = #0);
{------------------------------------------------------------------------------------}
const
sLineBreak = #10#13;
var
i : integer;
fichier : TextFile;
bm : TBookmark;
sCursor : TCursor;
valeur : string;
opENDS : boolean;
BEGIN
TRY
{ Création du fichier de sortie }
AssignFile(fichier,nomFichier);
Rewrite(fichier);
EXCEPT
on e: EXCEPTion do
raise EXCEPTion.Create('Erreur lors de la création du fichier [' + nomfichier + '] : ' + sLineBreak + e.message);
END;
sCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
TRY
ds.DisableControls;
opENDS := not ds.Active;
bm := nil;
TRY
with ds do
BEGIN
IF opENDS THEN
Open
ELSE
BEGIN
{ on sauvegarde la position de l'enregistrement courant dans }
{ le dataset afin de la restituer en fin de traitement }
bm := ds.GetBookmark;
First;
END;
{ ligne d'en-tête : on met le nom des zones }
for i:= 0 to FieldCount - 1 do
BEGIN
IF (i > 0) THEN
write(fichier,separateur + ds.Fields[i].FieldName)
ELSE
write(fichier,ds.Fields[i].FieldName);
END;
writeln(fichier); { passe à la ligne suivante dans le fichier }
while not Eof do
BEGIN
{ écriture de chaque colonne de l'enregistrement courant }
for i := 0 to FieldCount - 1 do
BEGIN
{ ajout du délimiteur si le champ est de type texte }
IF (delimiteur <> #0) and
(Fields[i].DataType in [ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString]) THEN
valeur := AnsiQuotedStr(Fields[i].Text,delimiteur)
ELSE
valeur := Fields[i].Text;
{ à partir du second champ, on ajoute le séparateur }
IF (i > 0) THEN
write(fichier,separateur + valeur)
ELSE
write(fichier,valeur)
END;
writeln(fichier); { passe à la ligne suivante dans le fichier }
Next;
END; { while not eof }
END; { with ds }
finally
{ si on a ouvert le ds, on le ferme }
IF opENDS THEN
ds.Close
ELSE
{ sinon, on se repositionne sur l'enregistrement initial }
BEGIN
ds.GotoBookmark(bm);
ds.FreeBookmark(bm);
END;
ds.EnableControls;
CloseFile(fichier);
END;
finally
Screen.Cursor := sCursor;
END;
END;
et on appelle la fonction
procedure TForm1.Button1Click(Sender: TObject);
begin
datasetToTextFile(Table1,'c:\dataset_textfile.txt',';',' ');
end;