PDA

Ver la Versión Completa : Abrir fichero de texto y reemplazar cadena


ZayDun
03-05-2012, 08:37:54
Hola, he estado buscando un metodo que me permita modificar parte de el contenido de un archivo de texto, y buscando por este foro encontre este codigo..


procedure TForm1.Button2Click(Sender: TObject);
var i,j: integer;
begin
with TStringList.Create do
try
LoadFromFile('c:\visitasweb.txt');
i:= 0;
while i < Count do
begin
j:= Pos('EMAIL',Uppercase(Strings[i]));
if j > 0 then
begin
Strings[i]:= Copy(Strings[i],j,MAXINT);
inc(i);
end
else
Delete(i);
end;
SaveToFile('c:\resultado.txt');
showMessage ('Listo');
finally
Free;
end;
end;


El codigo como podeis ver copia el contenido que estas buscando "EMAIL", pero como podria hacer para que en vez de copiarlo se reemplaze por el contenido que tengo en un memo? estoy utilizando delphi 6.

defcon1_es
03-05-2012, 13:34:36
Hola.
Cambia la línea del COPY por lo que necesites.


procedure TForm1.Button2Click(Sender: TObject);
var i,j: integer;
begin
with TStringList.Create do
try
LoadFromFile('c:\visitasweb.txt');
i:= 0;
while i < Count do
begin
j:= Pos('EMAIL',Uppercase(Strings[i]));
if j > 0 then
begin
Strings[i]:= Memo1.Lines.Text;
inc(i);
end
else
Delete(i);
end;
SaveToFile('c:\resultado.txt');
showMessage ('Listo');
finally
Free;
end;
end;

ecfisa
03-05-2012, 22:55:38
Hola.

Otra forma de reemplazar el texto buscado puede ser:

procedure ReplaceAndSave(const Name, Old, New: string);
begin
with TStringList.Create do
try
LoadFromFile(Name);
Text:= StringReplace(Text, Old, New, [rfReplaceAll]);
finally
SaveToFile(Name);
Free;
end;
end;


Llamada:

const
FNAME = 'C:\...\TU_ARCHIVO.TXT';
...
ReplaceAndSave(FNAME, Edit1.Text, Trim(Memo2.Text));


Saludos.

ZayDun
04-05-2012, 17:02:13
Gracias por la ayuda, no he podido contestar antes, el problema es que al guardarse el documento mediante savetofile crea un salto de linea que no puedo quitarlo, he intentado limpiar los salto "#13#10" pero al guardar de nuevo el documento vuelve a estar el salto de linea.

ecfisa
04-05-2012, 19:02:36
Hola.

Seguramente el texto que se inserta desde el memo tenga saltos de líneas, podrías quitarlos de este modo:

procedure ReplaceAndSave(const Name: string; Old, New: string);
begin
New:= StringReplace(New, #13#10, '', [rfReplaceAll]); //quitar las ocurrencias de #13#10
with TStringList.Create do
try
LoadFromFile(Name);
Text:= StringReplace(Text, Old, New, [rfReplaceAll]);
finally
SaveToFile(Name);
Free;
end;
end;


Saludos.

ZayDun
06-05-2012, 21:39:14
Hola.

Seguramente el texto que se inserta desde el memo tenga saltos de líneas, podrías quitarlos de este modo:
procedure ReplaceAndSave(const Name: string; Old, New: string);
begin
New:= StringReplace(New, #13#10, '', [rfReplaceAll]); //quitar las ocurrencias de #13#10
with TStringList.Create do
try LoadFromFile(Name);
Text:= StringReplace(Text, Old, New, [rfReplaceAll]);
finally
SaveToFile(Name);
Free;
end;
end;


Saludos.


Gracias de nuevo ecfisa!!, el código reemplaza y guarda sin ningún problema.