Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2009
lacovera lacovera is offline
Miembro
 
Registrado: dic 2006
Posts: 87
Poder: 18
lacovera Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 12-11-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 12-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

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;
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #4  
Antiguo 13-11-2009
lacovera lacovera is offline
Miembro
 
Registrado: dic 2006
Posts: 87
Poder: 18
lacovera Va por buen camino
Hola! el stringReplace me lo hace perfectamente, por ejemplo, cambiando A por 4, pero en cuanto le meto Ñ no hace nada..no lo entiendo
Responder Con Cita
  #5  
Antiguo 13-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por lacovera Ver Mensaje
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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #6  
Antiguo 13-11-2009
lacovera lacovera is offline
Miembro
 
Registrado: dic 2006
Posts: 87
Poder: 18
lacovera Va por buen camino
Ah, si intento buscarlo indicandole, en vez de una Ñ, que es el #165 lo ignora tb..
Responder Con Cita
  #7  
Antiguo 13-11-2009
lacovera lacovera is offline
Miembro
 
Registrado: dic 2006
Posts: 87
Poder: 18
lacovera Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 13-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Prueba aponerle la letra 'Ñ' tal cual como lo he codificado yo..osea directamente.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #9  
Antiguo 13-11-2009
lacovera lacovera is offline
Miembro
 
Registrado: dic 2006
Posts: 87
Poder: 18
lacovera Va por buen camino
Sí, probe justo así
f.Strings[i]:=StringReplace(f.Strings[i],'Ñ','N',[rfReplaceAll,rfIgnoreCase]);


pero nada
Responder Con Cita
  #10  
Antiguo 13-11-2009
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 13-11-2009
lacovera lacovera is offline
Miembro
 
Registrado: dic 2006
Posts: 87
Poder: 18
lacovera Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 13-11-2009
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por lacovera Ver Mensaje
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.
Responder Con Cita
  #13  
Antiguo 13-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por ixMike Ver Mensaje
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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como crear un fichero texto por codigo ? Sr.Scorpion Varios 6 28-12-2008 21:18:55
Codigo ascii Luli Varios 2 26-04-2005 10:11:13
código ascii davidgaldo Varios 5 10-11-2004 23:16:07
Código ASCII estendido rafita Varios 2 14-09-2004 14:01:10
Conversión de fichero en ASCII a Paradox apunto Conexión con bases de datos 1 24-06-2003 14:56:09


La franja horaria es GMT +2. Ahora son las 21:50:49.


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
Copyright 1996-2007 Club Delphi