2011-10-10 25 views
6

Tengo un archivo grande, 100,000 líneas. Puedo leer cada línea y procesarla, o puedo almacenar las líneas en una matriz y luego procesarlas. Preferiría usar la matriz para funciones adicionales, pero estoy realmente preocupado por el uso de memoria asociado con el almacenamiento de muchas líneas en una matriz, y si vale la pena.Leyendo un archivo grande línea por línea o almacenando sus líneas en una matriz

+1

¿Necesita hacer esto solo una vez o muchos usuarios de la web concurrentes desencadenarán esta acción? Y si hay muchos, ¿por qué no almacenar los contenidos del archivo en una base de datos? –

+0

Puede usar 'SplFileObject' para obtener un acceso tipo matriz a las líneas de texto (un iterador). – mario

+0

Probablemente no haya encontrado un mejor enfoque para su problema. Raramente necesitará tener todas las 100 000 líneas abiertas al * mismo tiempo * en la memoria. Piense en otras formas de hacer esto, tendrá problemas de rendimiento con su plan existente. – Incognito

Respuesta

3

Hay dos funciones con las que debe familiarizarse.

La primera es file(), que lee un archivo completo en una matriz, con cada línea como un elemento de matriz. Esto es bueno para archivos más cortos, y probablemente no es lo que desea utilizar en un archivo de línea de 100k. Esta función maneja su propia administración de archivos, por lo que no necesita abrir y cerrar el archivo explícitamente.

El segundo es fgets(), que puede usar para leer un archivo una línea a la vez. Puede utilizar esto para repetir mientras haya más líneas para procesar y ejecutar el procesamiento de línea dentro del ciclo. Tendrá que usar fopen() para manejar este archivo, puede que quiera rastrear el puntero del archivo usted mismo para la administración de recuperación (es decir, no tendrá que reiniciar el proceso desde cero si algo va de lado y la secuencia de comandos falla), etc.

Espero que eso sea suficiente para comenzar.

1

¿Qué tal una combinación de los dos? Lea 1000 líneas en una matriz, trátelas, elimine la matriz, luego lea 1000 más, etc. Controle el uso de la memoria y ajuste la cantidad que lee en una matriz a la vez.

Cuestiones relacionadas