Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   copiar un TMemo en un .txt (https://www.clubdelphi.com/foros/showthread.php?t=31524)

nenufer 10-05-2006 17:43:17

copiar un TMemo en un .txt
 
Hola a tod@ otra vez!! :) Vereis quiero copiar el contenido de un TMemo en un .txt y que no me lo sobreescriba. Yo utilizaba el savetofile y vi en el foro que el reset y append era lo que yo buscaba.
Cada vez que yo le doy a un boton en el Memo se introduce una linea(contenido de un campo). Y quiero q todo eso quede registrado en el .txt
El problema viene cuando yo ejecuto y en la misma ejecucion apreto las veces que sea el boton y se escriben,tantaas lineas como veces e pulsado el boton, en el memo, pero en el .txt al no sobreescribirse me lo copia todo repetido. Si x ejem se introduce:
1º -linea1
2º -linea2

En txt se escribe
linea1
linea1
linea2

Pero si utilizo el savetofile y salgo de la ejecucion y vuelvo a entrar pues se sobreescribe el .txt. Hay alguna forma de poder hacerlo sin que al iniciar se sobreescriba y mientras este en ejecucion no? Si a alguien se el ocurre algo, de verdad muxisimas gracias.
Espero haberlo explicado bien.

delphi.com.ar 10-05-2006 20:30:38

Cita:

Empezado por nenufer
Cada vez que yo le doy a un boton en el Memo se introduce una linea(contenido de un campo). Y quiero q todo eso quede registrado en el .txt
El problema viene cuando yo ejecuto y en la misma ejecucion apreto las veces que sea el boton y se escriben,tantaas lineas como veces e pulsado el boton, en el memo, pero en el .txt al no sobreescribirse me lo copia todo repetido.

Me parece que no pasa por como guardes la información en el archivo de texto, sino pasa pro mantejer banderas como para que si no cambio el texto no guardes los cambios.

Código Delphi [-]
procedure AppendToFile(AStrings: TStrings; FileName: TFileName);
var
  Stream: TStream;
  wMode: Word;
begin
  if FileExists(FileName) then
    wMode := fmOpenWrite
  else
    wMode := fmCreate;

  Stream := TFileStream.Create(FileName, wMode);
  try
    Stream.Seek(0, soEnd);
    AStrings.SaveToStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Memo1.Modified then
  begin
    Memo1.Modified := False;
    AppendToFile(Memo1.Lines, 'C:\MiArchivo.txt');
  end;
end;

Saludos!

nenufer 11-05-2006 08:48:10

Cita:

Empezado por delphi.com.ar
Me parece que no pasa por como guardes la información en el archivo de texto, sino pasa pro mantejer banderas como para que si no cambio el texto no guardes los cambios.

Buenos dias!! Gracias x contestar. Me hace lo mismo. El problema es q si que cambio el texto, porque si es la 1º vez que yo ejecuto el programa, bien porque no sobreescribe y me lo pone al final, pero si le doy otra vez,como modifico el texto (lo que he escrito anteriormente sigue en el memo) me vuelve a escribir la linea de antes,bueno que no es una linea solo, y lo siguiente que se ha escrito y asi cada vez que pulso el boton se escribe todo otra vez.
Habia pensado en borrar cada vez el memo, pero.... Si hay otra forma, mejor.
Gracias otra vez.

delphi.com.ar 11-05-2006 16:46:41

Cita:

Empezado por nenufer
El problema es q si que cambio el texto, porque si es la 1º vez que yo ejecuto el programa, bien porque no sobreescribe y me lo pone al final, pero si le doy otra vez,como modifico el texto (lo que he escrito anteriormente sigue en el memo) me vuelve a escribir la linea de antes,bueno que no es una linea solo, y lo siguiente que se ha escrito y asi cada vez que pulso el boton se escribe todo otra vez.

:confused: :confused: Perooo... no es lo que querías???.. .cuál sería la lógica??.. cuando se cambia el texto se guarda a continuación... o pretendes que el programa adivine cuando verdaderamente quieres que se guarde???

nenufer 11-05-2006 17:37:49

Hola:D!! Se guardaba xa todo entero y me lo repetia.
ej:
1º bloke1
2º bloke2.

pero me grababa .
blok1
bloke1
bloke2
Bueno lo tengo ya solucionado, gracias. Cuando apretaba al boton me hacia un seguimiento y me grababa todas las lineas en el archivo. Pero guardaba el memo entero. Entonces he optado por guardarlo linea a linea con el append.

Código Delphi [-]
procedure TForm1.GrabarEnArchivo(AsString : String; Nombre : TFileName);
var
  F : TextFile;
begin
  assignfile(F,Nombre);
  if FileExists(Nombre)
    then append(F)
  else
    rewrite(F);
  writeln(F,AsString);
  closefile(F);
end;

De todas formas lo que me has puesto me ha servido de mucho. Porque no es q controle esto como puedes ver:) y he aprendido cosillas interesantes. Muchas gracias.


La franja horaria es GMT +2. Ahora son las 03:59:30.

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