Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cantidad de líneas de un archivo txt (https://www.clubdelphi.com/foros/showthread.php?t=59915)

Carmelo Cash 12-09-2008 19:56:24

Cantidad de líneas de un archivo txt
 
Hola Foro:
Escribo nuevamente este mensaje porque no sé si el que escribí antes no llegó o no lo envié:

El tema es saber la cantidad de líneas que tiene un archivo txt sin leerlo todo.

Actualmente hago:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
Fichero: TextFile;
Linea: String;
Contador: integer;
begin
Contador :=0;
AssignFile(Fichero,'C:\Prueba.txt');
Reset(Fichero);
While Eof(Fichero)=False Do
  Begin
  Readln(Fichero,Linea);
  Inc(Contador);
 end;
Closefile(Fichero);
ShowMessage(IntToStr(Contador));   // << Cantidad de Líneas


Pero me parece mucha cosa para rescatar este dato, tal vez haya una forma mejor.

Saludos y gracias.

Delphius 12-09-2008 20:04:52

Hola Carmelo Cash,
Sabiendo que estás empleando ese método para abrir archivos, tal vez te interese saber de la función FileSize() que devuelve el "tamaño" en lineas de un archivo.

Saludos,

Carmelo Cash 12-09-2008 20:18:27

No...
 
Hola. Gracias por tu ayuda, pero el archivo prueba.txt tiene 32 líneas,
con el procedimiento que uso me dice 32, pero con

Código Delphi [-]
ShowMessage(intToStr( FileSize(Fichero) ));

dice "2" . ¿?:confused:

Habrá otro truco?

cHackAll 12-09-2008 20:21:46

Cita:

Empezado por Delphius (Mensaje 313907)
Hola Carmelo Cash,
Sabiendo que estás empleando ese método para abrir archivos, tal vez te interese saber de la función FileSize() que devuelve el "tamaño" en lineas de un archivo.

Saludos,

:eek::confused:

roman 12-09-2008 20:22:18

Cita:

Empezado por Delphius (Mensaje 313907)
la función FileSize() que devuelve el "tamaño" en lineas de un archivo.

Devuelve el tamaño en bytes o número de records, pero no de líneas.

// Saludos

Delphius 12-09-2008 20:28:42

Cita:

Empezado por roman (Mensaje 313913)
Devuelve el tamaño en bytes o número de records, pero no de líneas.

// Saludos

¡Tienes razón roman! ¡Que metida de pata que cometí!:(

Saludos,

dec 12-09-2008 20:30:33

Hola,

Cita:

Empezado por Delphius
¡Tienes razón roman! ¡Que metida de pata que cometí!:(

El que no dice ni mú es acaso quien esté metiendo la pata. En tu caso, Delphius, puede decirse que aventuraste una solución que de improviso no ha resultado correcta. :)

cHackAll 12-09-2008 20:32:35

Cita:

Empezado por dec (Mensaje 313917)
El que no dice ni mú es acaso quien esté metiendo la pata...

mú múúú !!! :confused:

roman 12-09-2008 20:32:52

Mu :rolleyes:

// Saludos

dec 12-09-2008 20:34:23

Hola,

Hala, ahora todos a decir mú... ¡que no lo decía yo por tanto, ni por vosotros! ¡Aludidos! ¡Desvirtuadores! :D :D

Delphius 12-09-2008 20:42:43

Cita:

Empezado por dec (Mensaje 313917)
Hola,



El que no dice ni mú es acaso quien esté metiendo la pata. En tu caso, Delphius, puede decirse que aventuraste una solución que de improviso no ha resultado correcta. :)

Cita:

Empezado por cHackAll (Mensaje 313918)
mú múúú !!! :confused:

Cita:

Empezado por roman (Mensaje 313919)
Mu :rolleyes:

// Saludos

Muuuuuuu!:D:D:D

Bueno ¿Entonces como queda la cosa? ¿Se puede saber?:rolleyes:

Código Delphi [-]
function FileLines(Archivo: string): integer;
var arch: TStrings;
begin
  result := 0;
  arch := TStrings.Create;
  try
    arch.LoadFromFile(Archivo);
    result := arch.Count;
  finally
    arch.Free;
  end;
end;

Saludos,

roman 12-09-2008 20:46:19

Cita:

Empezado por Delphius (Mensaje 313923)
Bueno ¿Entonces como queda la cosa? ¿Se puede saber?:rolleyes:

Pues bueno, yo no crea que haya muchas opciones para contar las líneas; no es una propiedad que se guarde como parte del archivo. A fin de cuentas un archivo de texto no es más que una secuencia de caracteres siendo las parejas #13#10 las que "marcan" una nueva línea, así que pienso que cualquier método en el fondo tiene que abrir el archivo y contar cuantas parejas de éstas hay.

Mu.

// Saludos

dec 12-09-2008 20:49:13

Hola,

Pienso lo mismo que Román, ahora más, porque él lo piensa. A menos que los archivos sean "nuestros", y acaso podamos incluir en ellos cuántas líneas contienen, además del contenido del archivo, de una forma u otra habrá que leer el archivo hasta el final, me temo, puesto que de otra forma no imagino cómo podríamos contar todas sus líneas.

Mú también. :D :D

egostar 12-09-2008 21:07:08

Hola

Y en el supuesto caso que se tratara de un achivo con cadenas de una longitud fija? Sin los caracteres de LF y CR?

:rolleyes::rolleyes::cool::D

amúúúú

cHackAll 12-09-2008 21:44:10

Cita:

Empezado por egostar (Mensaje 313933)
Hola

Y en el supuesto caso que se tratara de un achivo con cadenas de una longitud fija? Sin los caracteres de LF y CR?

:rolleyes::rolleyes::cool::D

amúúúú

Eso con un GetFileSize(hFile, nil) div LongitudFija.

Muú !!!

Carmelo Cash 16-09-2008 12:45:11

Entonces ?...
 
Hola:
Muchas gracias a los que participaron, pero entonces mi código no es una burrada?

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
Fichero: TextFile;
Linea: String;
Contador: integer;
begin
Contador :=0;
AssignFile(Fichero,'C:\Prueba.txt');
Reset(Fichero);
While Eof(Fichero)=False Do
  Begin
  Readln(Fichero,Linea);
  Inc(Contador);
 end;
Closefile(Fichero);
ShowMessage(IntToStr(Contador));   // << Cantidad de Líneas


Lo dejo así, y al que me critique le digo... Mu?

Delphius 16-09-2008 14:30:40

Cita:

Empezado por Carmelo Cash (Mensaje 314311)
Hola:
Muchas gracias a los que participaron, pero entonces mi código no es una burrada?

Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject); Var Fichero: TextFile; Linea: String; Contador: integer; begin Contador :=0; AssignFile(Fichero,'C:\Prueba.txt'); Reset(Fichero); While Eof(Fichero)=False Do Begin Readln(Fichero,Linea); Inc(Contador); end; Closefile(Fichero); ShowMessage(IntToStr(Contador)); // << Cantidad de Líneas



Lo dejo así, y al que me critique le digo... Mu?

Efectivamente, no es una burrada. Es una solución.
Ahora, si te interesa... Delphi cuenta con unas clases que te pueden ser de mucha ayuda para abrir, guardar, y editar archivos. En un ejemplo que mostré anteriormente hice uso de la clase TStrings.
Además de poder trabajar con el archivo, te evitarás tener que ir contando... esta clase ya cuenta con la propiedad Count que te devolverá la cantidad de lineas.

Para saber más sobre la clase puedes buscar en los foros, que se ha comentado al respecto. Y no te olvides de leer la ayuda que ofrece Delphi.

Saludos,

cHackAll 16-09-2008 16:19:34

Mucha razón Delphius pero me pregunto cuál sera más optima; TextFile vs TStrings :rolleyes: (para este caso ;))

mú !

MAXIUM 16-09-2008 16:52:54

Se me ocurre que si en en caso de que cada liena de texto sea igual... en longitud por lo menos, obten el tamaño del archivo con solo una línea. Luego cuando tengas el FICHERO con todas sus lineas obtines el valor total con filesize y lo divides por el de una línea.

Delphius 16-09-2008 19:37:04

Cita:

Empezado por cHackAll (Mensaje 314367)
Mucha razón Delphius pero me pregunto cuál sera más optima; TextFile vs TStrings :rolleyes: (para este caso ;))

mú !

Hola Javier,
No más daba una idea. Al menos para mi es lo más fácil y rápido de emplear:p:D. ¿Tienes otra en mente?:confused: Porque me gustaría saber a que te refieres.

Ahora si quieres, propongo a TStringStream:D

Saludos,


La franja horaria es GMT +2. Ahora son las 03:45:07.

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