Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar cadena de texto y reemplazarla (https://www.clubdelphi.com/foros/showthread.php?t=66746)

broly7 10-03-2010 12:46:03

Buscar cadena de texto y reemplazarla
 
Hola muy buenas.

Verán tengo el siguiente problema: Quiero abrir un archivo .txt y buscar una línea en la que ponga "set account 'Broly7'" y borrar el contenido entre comas.
El caso es que abro el archivo Assignfile...Reset...pero no se que función usar para que busque ese texto y después trabajar con el. Tengo algo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
var F: textfile; 
begin 
if fileexists('config.wtf') then 
begin MessageDlg('Config.wtf found. Next', mtinformation, [mbOK],0); 
AssignFile( F, 'config.wtf'); 
Reset( F );  

[Aqui nose como posicionarme en la línea "set account"]  

Closefile( F ); 
end 
else 
MessageDlg('Config.wtf not found!', mtwarning, [mbOK],0); end;


Me ayudariais mucho. Gracias.:)

Caro 10-03-2010 13:35:15

Hola broly7, puedes utilizar la función StringReplace y recuperar tu archivo en un memo y si no lo quieres mostrar puedes utilizar también un StringList.

Código Delphi [-]
//ejemplo con un memo
  Memo1.Lines.LoadFromFile('tuArchivo');
  Memo1.Text := StringReplace(Memo1.Text,'set account ''Broly7''', '', [rfReplaceAll]); //para que reemplace en todo el texto 
  Memo1.Lines.SaveToFile('tuArchivo');//Para grabar nuevamente en tu archivo

No entiendo bien esta parte, dices borrar el contenido entre comas y no hay ninguna coma sino comillas, ¿tu quieres encontrar el texto "set account 'Broly7'" y borrar Broly7?. El ejemplo anterior reemplaza todo ese texto por vacío.

Saluditos

broly7 10-03-2010 14:20:56

Cita:

Empezado por Caro (Mensaje 356373)
Hola broly7, puedes utilizar la función StringReplace y recuperar tu archivo en un memo y si no lo quieres mostrar puedes utilizar también un StringList.

Código Delphi [-]//ejemplo con un memo Memo1.Lines.LoadFromFile('tuArchivo'); Memo1.Text := StringReplace(Memo1.Text,'set account ''Broly7''', '', [rfReplaceAll]); //para que reemplace en todo el texto Memo1.Lines.SaveToFile('tuArchivo');//Para grabar nuevamente en tu archivo


No entiendo bien esta parte, dices borrar el contenido entre comas y no hay ninguna coma sino comillas, ¿tu quieres encontrar el texto "set account 'Broly7'" y borrar Broly7?. El ejemplo anterior reemplaza todo ese texto por vacío.

Saluditos

Si si como tu bien dices sería posicionarse entre las dos comillas "Broly7" y reemplazarlo por lo que sea pero con tu ejemplo creo que me puede servir. Porque yo ya tenia la idea de hacerlo mediante el memo pero no que´ria, yo creía que se podía hacer con la función assignfile.

Gracias.

BrunoBsso 10-03-2010 17:10:57

Hay una función que se llama Pos.
Ésta función recibe 2 argumentos:
1) Substring a buscar (en tu caso "Broly").
2) String donde lo vas a buscar.
Te devuelve un entero, que es la posición donde empieza el texto que buscas, sino te devuelve 0.
Saludos!

afunez2007 10-03-2010 17:22:50

Yo lo hago asi:

Código Delphi [-]
Uses StrUtils;

Memo1.text:=AnsiReplaceStr(Memo1.text, 'set account 'Broly7'', '');

Ojala te sirva

Saludos

BrunoBsso 10-03-2010 18:03:49

Como lo dice afunez2007 va a dar error por el tema de las comillas, deberías poner el substring asi:
'set account ''Broly7'''
Sí, ves bien. Son 2 comillas simples antes de Broly7 y 3 comillas simples luego de Broly7.
Eso 2 comillas simples unidas son tomadas por el compilador como una comilla simple dentro del string. Las 3 comillas simples unidas significa 2 comillas para agregar una simple al string, y 1 comilla final para terminar el string.
Saludos!

Caro 10-03-2010 18:42:00

Como bien te dice afunez2007, también puedes utilizar la función AnsiReplaceStr, añadiendo un poquito, para que StringReplace funcione como la función AnsiReplaceStr, debes añadir la opción rfIgnoreCase (Memo1.Text := StringReplace(.., '', [rfReplaceAll, rfIgnoreCase]);), las formas remplazan el segundo por tercer parámetro en todo el texto sin hacer diferencia entre mayusculas y minusculas.

En mi primer mensaje yo puse lo de las comillas para que las reconociera.

Cita:

Empezado por broly7 (Mensaje 356376)
yo creía que se podía hacer con la función assignfile.

También se puede hacer de esa forma, pero son mas líneas de codigo.

Saluditos

afunez2007 10-03-2010 18:54:22

Cita:

Empezado por afunez2007 (Mensaje 356404)
Yo lo hago asi:

Código Delphi [-]Uses StrUtils; Memo1.text:=AnsiReplaceStr(Memo1.text, 'set account 'Broly7'', '');


Ojala te sirva

Saludos

Perdon no me di cuenta, lo he corregido y de esta forma funciona correctamente:

Código Delphi [-]
Memo1.text:=AnsiReplaceStr(Memo1.text, 'set account '+QuotedStr('Broly7'), '');

Saludos


La franja horaria es GMT +2. Ahora son las 09:13:13.

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