Remplacement d'un caractère dans un fichier texte à un endroit précis

mrangelius Messages postés 1 Date d'inscription mardi 27 juillet 2004 Statut Membre Dernière intervention 7 juillet 2005 - 7 juil. 2005 à 12:28
 khelfinet - 3 déc. 2023 à 22:15
Bonjour,
J'aimerais trouver une commande ou une source permettant par exemple d'inserer
dans une ligne commencant par 03 de mon fichier texte un 'E' à la position 81 de cette ligne sachant qu'il y a encore quelque chose derrière.
en fait il s'agit de remplacer un caractère espace et d'y positionner mon E.
Si vous avez des idées je suis preneur.

Merci

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié le 4 déc. 2023 à 23:46

Tu commence par répérer ou se trouve la ligne à lire. Pour cela tu recherche la

chaine '03'.

LigneLu:='';

while (not EOF(Ton_Fichier))and(Copy(LigneLu,1,2)<>'03') do ReadLn(Fichier,LigneLu);



Apres ca normalement tu as ta ligne.



Ensuite tu copie les 80 premiers caracteres, tu insere 'E' et tu place les caracteres 82 à 'fin de la ligne'
 

LigneLu:=copy(LigneLu,1,80)+'E'+copy(LigneLu,82,Length(LigneLu)-82);





A partir de la "LigneLu" est ta phrase, mais avec le 81eme caractere remplacé par 'E'.



Si tu veux le remplacer dans le fichier, je crois que tu est obligé d'en ouvrir 2 en paralleles.

0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
Modifié le 4 déc. 2023 à 23:43

Salut,



Je te propose ceci (à adapter)


 

var

StringList : TStringList;

Index, I : Integer;

s : string;

begin

StringList := TStringList.Create;

StringList.LoadFromFile('MonFichier.Txt');
// Lecture du fichier


for I : = 0 to StringList.Count-1 do

begin

if Pos('03',StringList[i]) = 1 then
// Une ligne qui commence par '03'


begin

s : = StringList[i];
// Remplacement du caractère


s[81] := 'E';

StringList[i] := s;

end ;

end;

StringList.SaveToFile('Unit2.pas'); // Sauvegarde du fichier

end;





Ken@vo
<hr size ="2" width="100%">Code, Code, Codec !

[%3C/body ]

0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
Modifié le 4 déc. 2023 à 23:45

Salut,



CptPingu, ta manière est intéressante, mais j'ai une préférence pour celle à Kenavo.

D'ailleurs, ça m'a tellement inspiré (et comme je n'avais rien d'autre
de plus intelligent à faire...) que j'en ai fait une ch'tite fonction :


 

function ReplaceChar(FName, First: String; Position: Integer;

Ch: Char): Boolean;

var

StringList: TStringList;

i: Integer;

S: String;

begin

Result := False;

StringList := TStringList.Create;

try

try

StringList.LoadFromFile(FName);

for i := 0 to StringList.Count -1 do

begin

if Pos(First, StringList[i]) = 1 then

begin

S := StringList[i];

if Position > Length(s) then Exit;

S[Position] := Ch;

StringList[i] := S;

Result := True;

end;

end;

StringList.SaveToFile(FName);

except

//ShowMessage('Fichier introuvable');

end;

finally

StringList.Free;

end;

end;



Que l'on peut appeler ainsi, en reprenant les paramètres de mrangelius :


 

procedure TForm1.Button1Click(Sender: TObject);

begin

if ReplaceChar('MonFichier.txt', '03', 81, 'E') then

ShowMessage('Remplacement effectué avec succès');

end;




Normalement, elle est robuste comme on dit chez Borland, "béton" comme
on dit chez Bouygues, bref elle gère les erreurs possibles...



Bonne prog'



japee

0
 
program Exemple;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Classes;
 
function MaFonction(const s: string): string;
var
  i: integer;
begin
  result := s;
  for i := 1 to Length(result) do
    if result[i] in [',', ';', '?', '!'] then
      result[i] := '.';
end;
 
var
  liste: TStringList;
  i: integer;
 
begin
  liste := TStringList.Create;
 
  liste.LoadFromFile('fichier.txt');
 
  for i := 0 to liste.Count - 1 do
    liste.Strings[i] := MaFonction(liste.Strings[i]);
 
  liste.SaveToFile('fichier.txt');
 
  liste.Free;
end.
0
Rejoignez-nous