Produire fichier texte a delphi7
mourad84
-
Profil bloqué -
Profil bloqué -
Bonjour,
Salut tt le monde; je dois créer un fichier texte à partir d'une table paradox. jusque là tout fonctionne bien.... mon problème c'est que le fichier text contient des colonne a longueur variable
code : en delphi 7
****************
procedure TForm1.Button3Click(Sender: TObject);
var
fic : TextFile;
i : Integer;
begin
AssignFile(fic, 'C:\test.txt');
Rewrite(fic);
with table1 do begin
open;
First;
table1.DisableControls; // eviter de re-peindre l'écran
while not Eof do begin
for i:=0 to FieldCount - 1 do begin
if i > 0 then Write(fic, '');// le séparateur un blanc
Write(fic, Fields[i].AsString);
end;
WriteLn(fic);
Next;
end;
end;
table1.EnableControls;
CloseFile(fic);
********************
le résultat obtenu est :
Compte clef Nom montant
244034220033;12 ;ali MESSAOUD;12100
326012214454146;4;NOUAR ahmed;7200
48713805842;18;SLIMAN MED;7800
255123029540243;2;moustafa MEBAREK ;6200
mon souhait est obtenir un fichier text avec des champ de longueur fixe ...exemple avec le champ "compte" 20 caractère et "clef" 2 caractère .... donc il faut complété les champs moins a des 0
exemple
Compte clef Nom montant
00000000244034220033;12;000ali MESSAOD;0012100
merci pour tout les réponce....
Salut tt le monde; je dois créer un fichier texte à partir d'une table paradox. jusque là tout fonctionne bien.... mon problème c'est que le fichier text contient des colonne a longueur variable
code : en delphi 7
****************
procedure TForm1.Button3Click(Sender: TObject);
var
fic : TextFile;
i : Integer;
begin
AssignFile(fic, 'C:\test.txt');
Rewrite(fic);
with table1 do begin
open;
First;
table1.DisableControls; // eviter de re-peindre l'écran
while not Eof do begin
for i:=0 to FieldCount - 1 do begin
if i > 0 then Write(fic, '');// le séparateur un blanc
Write(fic, Fields[i].AsString);
end;
WriteLn(fic);
Next;
end;
end;
table1.EnableControls;
CloseFile(fic);
********************
le résultat obtenu est :
Compte clef Nom montant
244034220033;12 ;ali MESSAOUD;12100
326012214454146;4;NOUAR ahmed;7200
48713805842;18;SLIMAN MED;7800
255123029540243;2;moustafa MEBAREK ;6200
mon souhait est obtenir un fichier text avec des champ de longueur fixe ...exemple avec le champ "compte" 20 caractère et "clef" 2 caractère .... donc il faut complété les champs moins a des 0
exemple
Compte clef Nom montant
00000000244034220033;12;000ali MESSAOD;0012100
merci pour tout les réponce....
A voir également:
- Produire fichier texte a delphi7
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
Bonjour
Je te conseille de t'inscrire sur le site si tu veux que la communauté s'interesse à t'aider car beaucoup postent des questions sans jamais y retourner le moins les commenter.
Pour ce qui est de ton problème, puisque les champs de la table sont de type STRING, le formatage est un outil puissant pour manipuler les chaines et les nombres, dans ton cas il est inutil d'affecter un espace ou une virgule les valeurs de tableau Fields sont copiés avec un espace de séparation sauf le dernier.
Si les champs de la tables sont statiques, donc leur nombre est connu d'avance la ligne (WriteLn 3) de ce fragment de code illustre qu'on peut renseigner directement les valeurs Fields de la table par leurs indices respectifs, les zero dans le specificateur de format sert à équilibrer la taille des champs selon le besoin, les espaces sert de separateurs :
A toi d'en apprecier
--------------------------
program ChaineFormat;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
S1, s2, S3, S4 : String;
Table : Array[0..3] of String;
begin
S1 := '5678';
S2 := '1';
S3 := 'Quelqun';
S4 := '25';
Write(format('00000000000%S ', [S1]));
Write(format('00%S ', [S2]));
Write(format('%S ', [S3]));
Write(format('000%S', [S4]));
WriteLn;
WriteLn;
Table[0] := S1;
Table[1] := S2;
Table[2] := S3;
Table[3] := S4;
WriteLn(format('00000000000%S 00%S %S 000%S',
[ Table[0], Table[1], Table[2], Table[3] ]));
ReadLn;
end.
Je te conseille de t'inscrire sur le site si tu veux que la communauté s'interesse à t'aider car beaucoup postent des questions sans jamais y retourner le moins les commenter.
Pour ce qui est de ton problème, puisque les champs de la table sont de type STRING, le formatage est un outil puissant pour manipuler les chaines et les nombres, dans ton cas il est inutil d'affecter un espace ou une virgule les valeurs de tableau Fields sont copiés avec un espace de séparation sauf le dernier.
Si les champs de la tables sont statiques, donc leur nombre est connu d'avance la ligne (WriteLn 3) de ce fragment de code illustre qu'on peut renseigner directement les valeurs Fields de la table par leurs indices respectifs, les zero dans le specificateur de format sert à équilibrer la taille des champs selon le besoin, les espaces sert de separateurs :
A toi d'en apprecier
--------------------------
program ChaineFormat;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
S1, s2, S3, S4 : String;
Table : Array[0..3] of String;
begin
S1 := '5678';
S2 := '1';
S3 := 'Quelqun';
S4 := '25';
Write(format('00000000000%S ', [S1]));
Write(format('00%S ', [S2]));
Write(format('%S ', [S3]));
Write(format('000%S', [S4]));
WriteLn;
WriteLn;
Table[0] := S1;
Table[1] := S2;
Table[2] := S3;
Table[3] := S4;
WriteLn(format('00000000000%S 00%S %S 000%S',
[ Table[0], Table[1], Table[2], Table[3] ]));
ReadLn;
end.