Ver la Versión Completa : Cantidad de líneas de un archivo txt
Carmelo Cash
12-09-2008, 19:56:24
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:
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
Hola. Gracias por tu ayuda, pero el archivo prueba.txt tiene 32 líneas,
con el procedimiento que uso me dice 32, pero con
ShowMessage(intToStr( FileSize(Fichero) ));
dice "2" . ¿?:confused:
Habrá otro truco?
cHackAll
12-09-2008, 20:21:46
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
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
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,
Hola,
¡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
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
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
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. :)
mú múúú !!! :confused:
Mu :rolleyes:
// Saludos
Muuuuuuu!:D:D:D
Bueno ¿Entonces como queda la cosa? ¿Se puede saber?:rolleyes:
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
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
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
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
Hola:
Muchas gracias a los que participaron, pero entonces mi código no es una burrada?
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
Hola:
Muchas gracias a los que participaron, pero entonces mi código no es una burrada?
Código Delphi [-] (http://www.clubdelphi.com/foros/#)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
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,
cHackAll
16-09-2008, 20:38:50
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,
Si, muchas veces sacrificamos la optimizacion por legibilidad y facilidad...
que si tengo otra idea? bueno si pero ese no es el caso... solo quise filosofar un poco :p
Carmelo Cash
17-09-2008, 02:20:58
Entonces me planto firme con mi código, ya que los archivos tienen 500,000 y 800,000 líneas, y que cargarlos a un TStrings para solmente contar as líneas me parece demaciado utilización de memoria.
Gracias a todos. Mu mu.
"La vaca es un animal TODO FORRADO DE CUERO!!! "
Delphius
17-09-2008, 03:00:57
Entonces me planto firme con mi código, ya que los archivos tienen 500,000 y 800,000 líneas, y que cargarlos a un TStrings para solmente contar as líneas me parece demaciado utilización de memoria.
Gracias a todos. Mu mu.
"La vaca es un animal TODO FORRADO DE CUERO!!! "
Si lo único que te interesa es contar lineas, y deseas evitarte unos bytes por crear un objeto... Pues tal vez si sea un desperdicio.
Ahora, si vas a estar haciendo muchas operaciones sobre archivos, al menos a mi, el TStrings me sirve puesto que posee los métodos necesarios para hacer muchas operaciones con archivos.
Y si es un tanto preocupante el uso de memoria, y rapidez tal vez, tal vez algún TStream pueda ser mejor.
Saludos,
roman
18-09-2008, 10:18:10
Si lo único que te interesa es contar lineas, y deseas evitarte unos bytes por crear un objeto... Pues tal vez si sea un desperdicio.
Hombre, con 800,000 líneas no estamos hablando de "unos bytes", sino de por lo menos 2*(800,000) + "unos bytes" bytes.
// Saludos
Delphius
18-09-2008, 14:45:00
Hombre, con 800,000 líneas no estamos hablando de "unos bytes", sino de por lo menos 2*(800,000) + "unos bytes" bytes.
// Saludos
Voy a tener que ir a un oftalmologo, porque no vi los ceros que siguieron. El haber visto la coma me hizo pensar en decimales.
En ese caso si amigo... mejor vale ahorrarse.
Saludos,
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.