Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Remplazar texto en fichero (https://www.clubdelphi.com/foros/showthread.php?t=83080)

manujimenez 09-05-2013 13:27:53

Remplazar texto en fichero
 
He visto este código aquí en club delphi he intentado utilizarlo y me tira estos errores:

[DCC Warning] CambiaTexto.pas(35): W1019 For loop control variable must be simple local variable
[DCC Error] CambiaTexto.pas(37): E2003 Undeclared identifier: 'StuffString'
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'CambiaTexto.pas'

Alguien me puede explicar un poco, incluyo toda la unit. Disculpar las molestias soy muy novato.



unit CambiaTexto;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
ss : TStringList;
I: integer;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin

ss := TStringList.Create;
ss.LoadFromFile('c:\xxx\archivo.txt');
//ss.Text := StringReplace(ss.text,'22.150 ','22.250 ',[rfReplaceAll]);

for I := 0 to (ss.count -1) do
if sametext(copy(ss.strings[i], 117, length('21.250')), '21.250') then
ss.strings[i] := StuffString('21.250', 117, length('21.250'), '22.250');

ss.SaveToFile('c:\xxx\archivo.txt');
end;

end.

aposi 09-05-2013 13:40:39

en el uses tienes que declara la unidad StrUtils

Casimiro Notevi 09-05-2013 14:00:40

Cita:

Empezado por manujimenez (Mensaje 460105)
..

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Neftali [Germán.Estévez] 09-05-2013 14:40:05

Cita:

Empezado por manujimenez (Mensaje 460105)
He visto este código aquí en club delphi he intentado utilizarlo y me tira estos errores:

[DCC Warning] CambiaTexto.pas(35): W1019 For loop control variable must be simple local variable
[DCC Error] CambiaTexto.pas(37): E2003 Undeclared identifier: 'StuffString'
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'CambiaTexto.pas'

Alguien me puede explicar un poco, incluyo toda la unit.

[DCC Warning] CambiaTexto.pas(35): W1019 For loop control variable must be simple local variable

En este caso es un AVISO (Warning); Te dice que para un for loop (FOR) es mejor que utilices una variable local en lugar de una global.
Es decir, que declares la i:Integer, en la parte TForm2.Button1Click, en lugar de hacerlo en la sección var del formulario.

[DCC Error] CambiaTexto.pas(37): E2003 Undeclared identifier: 'StuffString'

En este caso es un ERROR. Te está diciendo que no sabe lo que es esto: 'StuffString'
Si miras tu código, verás que es una función que estás utilizando. Colocas el cursor encima, pulsas F1, y aparece la pantalla de ayuda que te dice que esta función está en la unit StrUtils. Por tanto te vas al uses y la añades,

Total, lo que te ha dicho aposi, sólo que espero que ahora entiendas porqué debes hacerlo.

manujimenez 09-05-2013 16:01:49

Ok, ya me funciona el problema era en la unit StrUtils la he añadido y listo ya me compila.
Muchas gracias ahora haber si consigo adaptarlo a lo mio.

Muchas gracias de nuevo.

manujimenez 16-05-2013 10:26:01

Remplazar texto en fichero 2
 
Disculpar de nuevo, me complila pero no consigo hacer. Tengo un fichero archivo.txt con varias cifras entre las que se hayan 22.150 y quiero sustituirlas por 28.250 (o lo que sea cualquier cosa...) y guardarlo como archivo2.txt.
Este código me compila y me genera el fichero archivo2.txt pero no me guarda el cambio.

Gracias de antemano y disculpar las molestias.

M

Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
I: integer;
ss : TStringList;

begin

ss := TStringList.Create;
ss.LoadFromFile('c:\xxx\archivo.txt');

for I := 0 to (ss.count -1) do
ss.Text := StringReplace(ss.text,'22.150','28.250''',[rfReplaceAll]);

ss.SaveToFile('c:\xxx\archivo2.txt');
end;

end.

ecfisa 16-05-2013 11:02:42

Hola manujimenez.

Por favor cuando incluyas código en tus mensajes usa los TAG's. La imágen muestra como hacerlo:



Tu consulta:
Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
  ss : TStrings;
begin
  ss := TStringList.Create;
  try
    ss.LoadFromFile('c:\archivo.txt');
    ss.Text := StringReplace(ss.Text, '22.150', '28.250', [rfReplaceAll]);
    ss.SaveToFile('c:\archivo2.txt')
  finally
    ss.Free
  end
end;

Saludos. :)

Neftali [Germán.Estévez] 16-05-2013 11:08:21

Antes de nada comentar que cuando utilices código, es mejor que añadas TAG's.

Por lo demás,no vas mal encaminado, aunque hay alguna cosa que no te acaba de quedar clara.

(1) Si usas ss.Text, estás accediendo a todo el texto del TStringList, por tanto no hace falta que utilices un for.
(2) Si quieres usar for y hacer el recorrido por todas las líneas, debes hacerlo con:

Código Delphi [-]
  ss[i] := StringReplace(ss[i],'22.150','28.250',[rfReplaceAll]);

De esta forma haces el recorrido línea a línea.

Por último te falta liberar el elemento que has creado (ss).

AÑADO: Veo que ecfisa ha sido más rápido.

manujimenez 16-05-2013 19:19:57

Si ya me funciona
 
Bueno, muchas gracias una vez más.
Efectivamente he añadido esta línea de código y ya funciona perfectamente.

Muchas muchas gracias


La franja horaria es GMT +2. Ahora son las 08:22: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