Ecrire dans un fichier texte à un endroit précis [Résolu]

cs_couf 220 Messages postés dimanche 5 janvier 2003Date d'inscription 6 janvier 2011 Dernière intervention - 24 sept. 2005 à 07:10 - Dernière réponse : DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 sept. 2005 à 09:07
3
Merci
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;

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 sept. 2005 à 07:57
0
Merci
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
Commenter la réponse de jlen100
cs_couf 220 Messages postés dimanche 5 janvier 2003Date d'inscription 6 janvier 2011 Dernière intervention - 24 sept. 2005 à 17:29
0
Merci
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
Commenter la réponse de cs_couf
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 24 sept. 2005 à 17:36
0
Merci
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!!
Commenter la réponse de jlen100
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 27 sept. 2005 à 00:29
0
Merci
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 !
Commenter la réponse de DeltaFX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.