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
Respuesta
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.
¿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.
- 1. GZIPInputStream leyendo línea por línea
- 2. Leyendo un archivo de texto en MATLAB línea por línea
- 3. leyendo un archivo de texto en R línea por línea
- 4. ¿Está almacenando una matriz o cadena de caracteres muy grande?
- 5. sincronización nodejs leer archivo grande línea por línea?
- 6. Leyendo línea específica de un archivo en PHP
- 7. Leyendo una línea completa de entrada
- 8. Analizando un archivo de texto grande (20GB) con python - leyendo en 2 líneas como 1
- 9. Leyendo la primera línea de un archivo en Ruby
- 10. ¿Cómo leer un archivo .gz línea por línea en C++?
- 11. reemplazar una línea con múltiples líneas en un archivo
- 12. Lea un archivo línea por línea
- 13. Lea un archivo grande de texto comprimido línea por línea en python
- 14. Haskell: lea un archivo por línea
- 15. Agregar saltos de línea en un archivo XML grande en una línea
- 16. La lectura de un archivo línea por línea en C#
- 17. vim: reemplazar un patrón de línea por una línea no
- 18. Leer un archivo línea por línea en Prolog
- 19. Leer un archivo de texto línea por línea en Qt
- 20. ¿Cómo se busca un archivo de texto grande para una cadena sin ir línea por línea en C#?
- 21. phantomjs javascript leer un archivo local línea por línea
- 22. Leer/Analizar archivo de texto línea por línea en VBA
- 23. Imprimir una matriz de matrices en una línea en la consola (una línea por objeto matriz principal) en Ruby
- 24. Leyendo un archivo en una matriz de bytes (PHP)
- 25. Declaraciones de 'var' de línea única, o una por línea?
- 26. ¿Cómo puedo reemplazar una línea específica por número de línea en un archivo de texto?
- 27. ¿Cómo leo un archivo gzip línea por línea?
- 28. Leyendo un archivo de texto en java
- 29. Perl leer línea por línea
- 30. lee un archivo en una matriz de líneas en d
¿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? –
Puede usar 'SplFileObject' para obtener un acceso tipo matriz a las líneas de texto (un iterador). – mario
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