PDA

Ver la Versión Completa : Buscar cadena de texto y reemplazarla


broly7
10-03-2010, 12:46:03
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í:

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.


//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
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 [-] (http://clubdelphi.com/foros/#)//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:


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.

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
Yo lo hago asi:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)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:


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

Saludos