Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   manipular un TXT, hacer una especie de log... (https://www.clubdelphi.com/foros/showthread.php?t=58975)

Greco 07-08-2008 23:06:46

manipular un TXT, hacer una especie de log...
 
Hola... hace tiempo que no me pasaba por aquí...

Bueno, tengo la necesidad de realizar un pequeño programita que me guarde en un txt unas 5 lineas... es como una especie de registro que me almacena una cadena en una linea nueva pero siempre quiero mantener la misma cantidad de lineas (registros), osea, si quiero solo 5 lineas me debería borrar la mas antigua para poder almacenar la ultima linea y quedar siempre con 5 lineas.
Una particularidad que debe tener es que si el contenido que va a almacenar ya fue almacenado la ultima vez, entonces no lo vuelve a guardar...

archivo.txt
----------
Código:

texto de la linea uno
aqui la linea dos
...
este es el texto para la linea 5

como conocimientos de delphi tengo bastante poco ya que solo es por hobbie, me he leido algunos manuales y probado algunos ejemplos entonces no es mucho lo que se.

Buscando en el foro vi que lo que me puede servir es el tstringlist, alguno me puede indicarmas o menos como ocuparlo y guiarme un poco en la tarea para poder ir probando??? no estoy pidiendo codigo listo ni nada, para que no se mal interprete... lo que mas deceo es aprender asi que cualquier ayuda será bienvenida.

Si no me expliqué bien en lo que necesito realizar o algo no quedó claro solo pregunten y doy mas detalles.

Saludos

Khronos 07-08-2008 23:24:08

Hola, manejar un TStringList es de lo mas sencillo, pero requiere la unidad Classes. Si no deseas emplear esta unidad por motivos de tamaño del ejecutables por ejemplo :D te recomiendo que uses los viejos métodos AssignFiles, Reset, Writeln.. etc

Código Delphi [-]
uses Classes;
 
procedure CrearLog;
var
Log: TStringList;
begin
Log:= TStringList.Create;
Log.add('Linea 1');
Log.add('Linea 2');
Log.add('....');
Log.SaveToFile('C:\log.txt');
Log.free;
end;

Salu2

seoane 07-08-2008 23:33:21

Vamos a ver si lo puedo hacer de memoria:
Código Delphi [-]
procedure Log(Str: String; Archivo: String);
begin
  // Creamos el objeto
  with TStringList.Create do
  try
    try
      // Intentamos cargar el archivo
      LoadFromFile(Archivo);
    except
      // Si no podemos ignoramos el error
    end;
    // Si ya hay lineas
    if Count > 0 then
     // Comprobamos si la ultima es igual a la que queremos introducir
     if Strings[Count-1] = Str then
      Exit; // Si lo es salimos
    // Dejamos solo las cuatro ultimas lineas
    while Count > 4 do
      Delete(0);
    // Y añadimos la nueva linea
    Add(Str);
   // Por ultimo guardamos el archivo
    SaveToFile(Archivo);
  finally
    Free;
  end;
end;

Khronos 07-08-2008 23:40:53

Seoane, siempre complicas las cosas :D. Se me olvido comprobar si existía el archivo para cargarlo, es que no tengo el compilador delante :(

Código Delphi [-]
uses Classes; 


procedure CrearLog;
var
Log: TStringList;
begin
Log:= TStringList.Create;
If FileExists('C:\log.txt') then Log.LoadFromFile('C:\log.txt');
Log.add('Linea 1');
Log.add('Linea 2');
Log.add('....');
Log.SaveToFile('C:\log.txt');
Log.free;
end;

Otro método:

Código Delphi [-]
var
Log: TextFile;
begin
AssignFile (Log, 'C:\log.txt');
Append (Log);
Writeln (Log, 'Linea 1');
Writeln (Log, 'Linea 2');
Writeln (Log, '...');
CloseFile (Log);
end;

Salu2

jandok238 07-08-2008 23:55:01

Cita:

Empezado por Khronos (Mensaje 306451)
Seoane, siempre complicas las cosas :D. Se me olvido comprobar si existía el archivo para cargarlo, es que no tengo el compilador delante :(

Salu2

el detalle es que tu no validas que sean solo 5 lineas....

ademas... yo supongo (me parece que SEOANE tambien) que se va agregando linea a linea, pero si ya hay 5 lineas, se debe borrar la primera para insertar la nueva, pero en ultimo lugar....

bueno asi lo entendi yo... ;):D:D

salu2!!!!!!!

Khronos 07-08-2008 23:56:16

Tienes razón, no me di cuenta de las 5 líneas :D

Salu2

jandok238 08-08-2008 00:03:36

pues esta es mi aportacion.... (ya lo tenia en algun programita... (bueno, sin la restriccion de 5 lineas... :D:D:D ) )

Código Delphi [-]
procedure TForm1.GuardarUltimaLinea(UltimaLinea:String);
var
  texto : TStrings;
begin
  texto:=TStringList.Create;
  if (FileExists('c:\archivo_LOG.txt')) then
  begin
    texto.LoadFromFile('c:\archivo_LOG.txt');
    if (texto.Count = 5) then
    begin
      texto.Delete(0);
      texto.Add(UltimaLinea);
    end
    else
    begin
      texto.Add(UltimaLinea);
    end;
    texto.SaveToFile('c:\archivo_LOG.txt');
    texto.Free;
  end
  else
  begin
    texto.Add(UltimaLinea);
    texto.SaveToFile('c:\archivo_LOG.txt');
    texto.Free;
  end;
end;

salu2!!!!!!!

reduciendolo un poco... :D:D:D

Código Delphi [-]
procedure TForm1.GuardarUltimaLinea(UltimaLinea:String);
var
  texto : TStrings;
begin
  texto:=TStringList.Create;
  if (FileExists('c:\archivo_LOG.txt')) then
  begin
    texto.LoadFromFile('c:\archivo_LOG.txt');
    if (texto.Count = 5) then
      texto.Delete(0);
    texto.Add(UltimaLinea);
    texto.SaveToFile('c:\archivo_LOG.txt');
    texto.Free;
  end
  else
  begin
    texto.Add(UltimaLinea);
    texto.SaveToFile('c:\archivo_LOG.txt');
    texto.Free;
  end;
end;

Neftali [Germán.Estévez] 08-08-2008 08:41:13

Si va a ser una escritura continua como se hace en los LOG's (aunque no sea este el caso) yo intentaría no "cargar" el fichero con LoadFromFile cada vez. Si se desea sí se puede garbar cada vez (o cada 5), pero no leer cada vez.

jandok238 08-08-2008 15:39:57

Cita:

Empezado por Neftali (Mensaje 306483)
Si va a ser una escritura continua como se hace en los LOG's (aunque no sea este el caso) yo intentaría no "cargar" el fichero con LoadFromFile cada vez. Si se desea sí se puede garbar cada vez (o cada 5), pero no leer cada vez.

Haber... aqui como que no te entendi...

Comentas que no 'recomiendas' (o que tu no lo harias) leer el fichero cada vez... pero entonces como saber lo que ya esta guardado al momento de querer agregar una nueva linea al fichero ???

Aunque creo que depende del uso... En mi caso, lo ocupo para guardar un LOG de llamadas perdidas, en un sistema de recepcion de llamadas... y aquellas que no se contesten, se agregan al fichero. y como este evento no es tan repetido y sucede en periodos de tiempo largo, digamos que cada 30 min... por eso lo guardo y des pues cuando lo necesito, lo cargo de nuevo para agregar la siguiente linea.

Haber si pudieras aclarar esa pregunta.... ;):D

salu2!!!!!!!

Neftali [Germán.Estévez] 08-08-2008 16:22:14

Cita:

Empezado por jandok238 (Mensaje 306531)
Comentas que no 'recomiendas' (o que tu no lo harias) leer el fichero cada vez... pero entonces como saber lo que ya esta guardado al momento de querer agregar una nueva linea al fichero ???

En el ejemplo que hay:
(1) Crear StringList
(2) Cargar de disco
(3) Añadir la nueva (eliminando una si es necesario)
(4) Grabar a disco

Si mantienes el StringList en memoria, puedes hacer únicamente los dos últimos.

jandok238 08-08-2008 16:38:04

Cita:

Empezado por Neftali (Mensaje 306551)
En el ejemplo que hay:
(1) Crear StringList
(2) Cargar de disco
(3) Añadir la nueva (eliminando una si es necesario)
(4) Grabar a disco

Si mantienes el StringList en memoria, puedes hacer únicamente los dos últimos.


haaaa ok ... asi pos si... :D:D

Muy buen punto... ;);) ahora si ya entendi... :p:D:D

gracias por la aclaracion...

salu2!!!!!!!

Greco 09-08-2008 07:20:33

Muchas gracias por todas las respuestas, no pensé que recibiría tantas :D, la verdad es que ayer las estuve leyendo asi a la rapida por que no tenia mucho tiempo y no pude responder antes.
He leido cada uno de los post y leyendo los códigos y el que más se acomoda a lo que necesito es el posteado por seoane, lo que me queda agregarle es que verifique si existe el archivo, pero de eso ya me encargo yo... ya me pasaron el codigo listo para llegar y usar.... lo leere bien para entender que hace cada linea de cdigo para aprender... es la idea.

Se agradece todo el aporte, cualquier duda o problema que tenga relacionado a este mismo tema lo postearé aqui.

Saludos

seoane 09-08-2008 12:06:01

Cita:

Empezado por Greco (Mensaje 306674)
lo que me queda agregarle es que verifique si existe el archivo

El código que te pase ya tiene en cuenta eso :confused:


La franja horaria es GMT +2. Ahora son las 18:43:00.

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