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

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

Votre réponse

5 réponses

Meilleure réponse
jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 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é 94 internautes ce mois-ci

Commenter la réponse de jlen100
jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 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
Messages postés
220
Date d'inscription
dimanche 5 janvier 2003
Dernière intervention
6 janvier 2011
- 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
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
- 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
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Dernière intervention
8 avril 2009
- 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.