@:ibrahimakhalil :
Bonjour,
procedure TFom1.DatasetToTextFile(ds: TDataSet; nomFichier: string;
separateur: string = ';'; delimiteur: char = #0);
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 pendant 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
bm := ds.GetBookmark;
First;
end;
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);
while not Eof do
begin
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].AsString, delimiteur)
else
valeur := Fields[i].Text;
// if (Fields[i].DataType = ftMemo) or (Fields[i].DataType = ftFmtMemo) then
// valeur := Fields[i].AsString;
{ à partir du second champ, on ajoute le séparateur }
if (i > 0) then
write(fichier, separateur + valeur)
else
write(fichier, valeur)
end;
writeln(fichier);
Next;
end;
end;
finally
if openDS then
ds.Close
else
begin
ds.GotoBookmark(bm);
ds.FreeBookmark(bm);
end;
ds.EnableControls;
CloseFile(fichier);
end;
finally
Screen.Cursor := sCursor;
end;
end;
cantador