Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sustituir Codigo ASCII Fichero texto (https://www.clubdelphi.com/foros/showthread.php?t=64968)

lacovera 12-11-2009 15:30:02

Sustituir Codigo ASCII Fichero texto
 
Hola a todos!!

No paro de darle vueltas buscando algo así pero no encuentro nada... necesito leer un fichero de texto, letra a letra, y sustituir palabras ¿el problema? que quiero sustituir Ñ, º..cosas así, que no me está cogiendo a la hora de leerlo y tengo que comparar la palabra que leo con el cod ascii, pero de verdad no lo veo..
¿alguna ayudilla? un saludo y gracias

coso 12-11-2009 17:48:33

Hola,
lo que se me ocurre es que puedes hacer es cargar el fichero en un TStringList y, usando StringReplace sobre su propiedad Text, ir sustituyendo los caracteres que te interesen, y usar el metodo SaveToFile para salvar los cambios. Un saludo.

rgstuamigo 12-11-2009 20:37:59

Mas o menos coso que quiso decir que lo hagas asi:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
f:TStrings;
begin
   f:=TStringList.Create;
   try
     f.LoadFromFile('C:\MyArchivo.txt'); //leemos desde el archivo
     f.Text:=StringReplace(f.Text,'ñ','n',[rfReplaceAll,rfIgnoreCase]);//reemplazo las "ñ" por "n" de todo el archivo de un saque
     f.SaveToFile('C:\MyArchivo.txt');//guardamos al mismo archivo
     ShowMessage('Se ha modificado..');
   finally
   f.Free;//Liberamos el objeto f
   end;

end;
Aunque lo veo mas conveniente hacerlo asi:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
f:TStrings;
i:Integer;
begin
   f:=TStringList.Create;
   try
     f.LoadFromFile('C:\MyArchivo.txt'); //leemos desde el archivo
    for  i:=0  to f.Count-1  do
     f.Strings[i]:=StringReplace(f.Strings[i],'ñ','n',[rfReplaceAll,rfIgnoreCase]);//reemplazo las "ñ" por "n" linea a linea

     f.SaveToFile('C:\MyArchivo.txt');
     ShowMessage('Se ha modificado..');
   finally
   f.Free;//Liberamos el objeto f
   end;
Ya que puede ocurrir que nuestro archivo sea demasiado grande para hacerlo todo de un golpe.;)
Saludos...:)
end;

lacovera 13-11-2009 00:05:46

Hola! el stringReplace me lo hace perfectamente, por ejemplo, cambiando A por 4, pero en cuanto le meto Ñ no hace nada..no lo entiendo

rgstuamigo 13-11-2009 00:08:43

Cita:

Empezado por lacovera (Mensaje 346443)
Hola! el stringReplace me lo hace perfectamente, por ejemplo, cambiando A por 4, pero en cuanto le meto Ñ no hace nada..no lo entiendo

Pues te cuento que yo personalmente lo he probado y me funciona perfecto.:).
Quisas algo debes estar haciendo mal.;)
Saludos...:)

lacovera 13-11-2009 00:10:09

Ah, si intento buscarlo indicandole, en vez de una Ñ, que es el #165 lo ignora tb..

lacovera 13-11-2009 00:11:13

olvidé comentar que lo hago con Lazarus, aunq es pascal..

exactamente pongo esto

f:=TStringList.Create;
try
f.LoadFromFile('d:\hola.txt'); //leemos desde el archivo
for i:=0 to f.Count-1 do
showmessage(f.strings[i]);
f.Strings[i]:=StringReplace(f.Strings[i],'Ñ','N',[rfReplaceAll,rfIgnoreCase]);//reemplazo las "ñ" por "n" linea a linea
f.SaveToFile('d:\hola.txt');
ShowMessage('Se ha modificado..');
finally
f.Free;//Liberamos el objeto f
end;

y el archivo hola.txt contiene esto

4
4sf4ewrfwqerÑ
9sdfñwerÑewr

rgstuamigo 13-11-2009 00:14:01

Prueba aponerle la letra 'Ñ' tal cual como lo he codificado yo.;).osea directamente.:)

lacovera 13-11-2009 00:20:29

Sí, probe justo así
f.Strings[i]:=StringReplace(f.Strings[i],'Ñ','N',[rfReplaceAll,rfIgnoreCase]);


pero nada

ixMike 13-11-2009 00:30:14

Nótese que la función StringReplace diferencia mayúsculas de minúsculas...

Aunque si no es por eso, puede que sea cosa del conjunto de carácteres del fichero de texto.

lacovera 13-11-2009 00:32:56

Si hago un showmessage exactamente de la linea que está leyendo me muestra, si pone en el fichero ABCÑP muestra ABC?P, pero si le digo que reemplace el ? no lo encuentra

ixMike 13-11-2009 01:06:25

Cita:

Empezado por lacovera (Mensaje 346456)
Si hago un showmessage exactamente de la linea que está leyendo me muestra, si pone en el fichero ABCÑP muestra ABC?P, pero si le digo que reemplace el ? no lo encuentra

Entonces el problema es de la codificación de carácteres. ¿Has probado carga el fichero en un TMemo o similar? Seguramente suceda lo mismo, que te salga ABC?P.

Eso se soluciona (si el texto está en ASCII) con una función de la API de Windows, OEMToANSI. Además de la Ñ te solucionará otros carácteres, como º, ª, ¿, carácteres con tilde, etc.

Si pruebas a visualizar el texto desde una consola de comandos en Windows, las eñes y demás carácteres "extraños" se te mostrarán correctamente.

rgstuamigo 13-11-2009 14:38:28

Cita:

Empezado por ixMike (Mensaje 346455)
Nótese que la función StringReplace diferencia mayúsculas de minúsculas...

Eso no interesa amigo ixMike, pues para eso esta esto incluido [rfReplaceAll,rfIgnoreCase]como parámetro de la funcion.;)
Saludos...:)


La franja horaria es GMT +2. Ahora son las 19:22:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi