Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Insertar al principio de un fichero de texto informacion (https://www.clubdelphi.com/foros/showthread.php?t=29012)

pepecharlie67 10-01-2006 13:52:00

Insertar al principio de un fichero de texto informacion
 
Pues eso,quisiera introducir en un fichero de texto una cierta información al principio del mismo. Por ejemplo, una cabecera.Ejemplo:

Fichero:
Hola, soy juan.......
....

Y me gustaria añadir al principio por ejemplo la fecha y hora

Fichero Salida:
16/12/05 14:34
Hola, soy juan.......
.....

Gracias antes de nada.

Neftali [Germán.Estévez] 10-01-2006 14:05:16

Si el fichero no es muy grande, una forma fácil y sencilla es cargarlo en un TStrings (LoadFromFile) hacen un Insert para añadir líneas al principio y luego un SaveToFile para volver a guardarlo en disco.

pepecharlie67 10-01-2006 16:29:20

Un TSrings donde?¿Don de lo declaro y de que manera?Perdonen mi ignorancia sobre el tema pero no se como hacerlo.¿Me podrias poner codigo ejemplo?Muchas gracias.

dec 10-01-2006 16:39:22

Hola,

Echa un vistazo a esta búsqueda en los Foros: el utilizar la clase "TStrings" para trabajar con archivos de texto es un tema que se ha tratado en más de una ocasión.

pepecharlie67 10-01-2006 17:47:07

Ok,ya casi lo tengo.El problema ahora me surge que al usar el insert,solo puedo insertar un parámetro en una linea.Es decir,no puedo insertar una fecha completa, junto con un nombre en la primera fila.¿Que funcion puedo utilizar en lugar de insert?

delphi.com.ar 10-01-2006 17:50:34

Si no te molesta crear un archivo a partir de este para agregar un fragmento al inicio, yo haría algo como:
Código Delphi [-]
procedure CopyAppend(ASource, ADest: TFileName; Header: string);
var
  fsSource,
  fsDest: TFileStream;
begin
  fsDest := TFileStream.Create(ADest, fmCreate);
  try
    fsDest.Write(Header[1], Length(Header));

    fsSource := TFileStream.Create(ASource, fmOpenRead + fmShareDenyNone);
    try
      fsDest.CopyFrom(fsSource, 0);
    finally
      fsSource.Free;
    end;
  finally
    fsDest.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyAppend('C:\SOURCE.TXT', 'C:\DEST.TXT', DateTimeToStr(Now) + #13#10);
end;
Si lo que quieres es desplazar la información del archivo hacia atrás, y escribir en el mismo encabezado del archivo. Vas a tener que copiar el contenido a la memoria, escribirlo en la nueva posición (0+offset), y escribir lo que quieras en el encabezado.

Saludos!

delphi.com.ar 10-01-2006 17:54:00

Escribí el mensaje anterior sin llegar a ver tu respuesta!..

Cita:

Empezado por pepecharlie67
Ok,ya casi lo tengo.El problema ahora me surge que al usar el insert,solo puedo insertar un parámetro en una linea.Es decir,no puedo insertar una fecha completa, junto con un nombre en la primera fila.¿Que funcion puedo utilizar en lugar de insert?

Seguramente porque estas haciendo dos inserts:
Código Delphi [-]
AStrings.Insert(0, sFecha);
AStrings.Insert(0, sNombre);
O uno de los datos contiene los caracteres de fin de línea CR/LF.

Concatena los dos valores:
Código Delphi [-]
AStrings.Insert(0, sFecha + ' ' + sNombre);

maeyanes 10-01-2006 18:29:31

Hola...

Federico, existe un error en tu respuesta, y es que el método Insert del TStringList usa dos parámetros, el índice del lugar donde insertar la cadena y la cadena:

Código Delphi [-]
MiStringList.Insert(0, '10/01/2006') // Inserto la fecha en la posición 0 del TStringList




Saludos...

pepecharlie67 10-01-2006 18:40:10

Ok,gracias por su ayuda.Finalmente lo resolvi añadiendo +(para poder añadir mas strings,con eso me valia) dentro de insert.Gracias

delphi.com.ar 10-01-2006 19:06:22

Cita:

Empezado por maeyanes
Federico, existe un error en tu respuesta...

¡Corregido!..


La franja horaria es GMT +2. Ahora son las 05:20:37.

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