Ecrire dans un fichier texte à un endroit précis

Résolu
cs_couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
- 24 sept. 2005 à 07:10
DeltaFX
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
- 27 sept. 2005 à 00:29
Bonjour,



J'ai un fichier texte qui à 34 lignes



je souhaites en réécrire un nouveau



qui remplace à partire du caractère 22 de la ligne 8

10 caractères



J'ai donc écrit ce bout de code



program Facture;



{$APPTYPE CONSOLE}



uses

SysUtils,

strUtils;



var

R,lig,ligne,N_Facture,Agence: string;

i: integer;

F,nouveau: textfile;



begin



assign(nouveau,'c:\master\sernam2.tto') ;

rewrite(nouveau);

append(nouveau);





Write ('entrer un N° de Facture :');

readln(N_Facture);

// lecture du fichier

assign(F,'C:\MASTER\facture.tto');



reset(F);

//while not eof(F)



for i:= 1 to 34

do begin

// lecture de la ligne





readln (F,ligne);

lig:=ligne;

writeln(nouveau,lig);



IF i = 8 then

begin

R:=StuffString(lig,23,10,N_Facture);

writeln(nouveau,R);

end



else

readln (F,ligne);

lig:=ligne;

writeln(nouveau,lig);

end;









for i:= 1 to 10000

do

begin

writeln (lig)

end ;

closefile(nouveau);



end.



Le problème et je pense qu'il est minime mais je n'ariive pas à voir,



c'est que cela me réécrit ma ligne 8 et me rajoute mes changements en ligne 9



Merci d'avance de votre aide.



couf

5 réponses

jlen100
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
24 sept. 2005 à 09:07
par contre pouquoi

for i:= 1 to 10000

do

begin

writeln (lig)

end ;

?

ainsi tu ajoutes 10000 fois la derniere ligne lig

maintenenant si tu avais indenté ton code tu aurais vu:

for i: = 1 to 34 do

begin

// lecture de la ligne

readln (F,ligne);

lig:= ligne;

writeln(nouveau,lig); // là tu écris immédiatement la ligne non modifiée

if i = 8 then

begin

R:= StuffString(lig,23,10,N_Facture);

writeln(nouveau,R);

end else readln (F,ligne);

lig: =ligne;


writeln(nouveau,lig);//là tu forces l'écriture de la ligne non modifiée


end;

dans tous les cas tu écris 2 fois ta ligne.

il aurait fallu écrire:

i:= 1


while not EOF(F) do // pour être sur d'atteintre la fin du fichier


begin


// lecture de la ligne

readln (F,ligne);


IF i = 8 then


begin


R:=StuffString(ligne,23,10,N_Facture);


writeln(nouveau,R);


end else

begin

writeln(nouveau,ligne);

end;

inc(i);// on incremente le pointeur


end;
3
jlen100
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
24 sept. 2005 à 07:57
salut,

il serait plus de passer par un Tstrng.

var

TempList: TStrings;

R,lig,ligne,N_Facture,Agence: string;

begin

TempList := TStringList.Create; //creation d'une liste provisoire

try
TempList.LoadFromFile('C:\MASTER\facture.tto');//lecture du fichier

lig: =TempList[8];.

TempList[8]:=StuffString(lig,23,10,N_Facture);//modification de la ligne

TempList.SaveToFile('c:\master\sernam2.tto');//enregistrement dans nouveau

finally TempList.Free; end;//liberation memoire

end;

bonne prog
0
cs_couf
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
24 sept. 2005 à 17:29
Merci Beaucoup,



hier un de mes collègues m'a traité de jeune PADAWAN (cf guerre des étoiles)

Je comprends maintenant pourquoi.

Merci encore

couf
0
jlen100
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
24 sept. 2005 à 17:36
entre les 2 solutions que je t'ai donné la 1ere donne un code plus propre.

Maintenant c'est en se forgeant sa propre expérience que l'on apprend!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeltaFX
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
27 sept. 2005 à 00:29
Bah, et encore, jeune Padawan, ca va, c'est pas trop la casse.... T'as jamais eu droit à " héhé, pas encore au point, petit scarabé..."

Flute, je viens de me surprendre a penser qu'en cobol c'est infiniment plus simple, abattez-moi !

gnh !
0