J'essaie de savoir quelle est la meilleure façon de lire des fichiers de texte volumineux (au moins 5 Mo) en C++, compte tenu de la rapidité et de l'efficacité. N'importe quelle classe ou fonction préférée à utiliser et pourquoi? Par ailleurs, je cours spécifiquement sur l'environnement UNIX.Lecture de fichiers texte
Répondre
Les classes de flux (ifstream) fonctionnent réellement bien; En supposant que vous ne soyez pas restreint, assurez-vous de désactiver sync_with_stdio (dans ios_base: :). Vous pouvez utiliser getline() pour lire directement dans std :: strings, mais du point de vue des performances, utiliser un tampon fixe comme char * (vecteur de chars ou old-school char []) peut être plus rapide (plus de risques/complexité)).
Vous pouvez utiliser l'itinéraire mmap si vous souhaitez jouer à des jeux avec des calculs de taille de page, etc. Je vais probablement le construire d'abord en utilisant les classes de flux et voir si c'est assez bon. En fonction de ce que vous faites avec chaque ligne de données, vous pouvez commencer à trouver vos routines de traitement comme point d'optimisation et non comme E/S.
Utilisez l'ancien fichier de style io.
fopen the file for binary read
fseek to the end of the file
ftell to find out how many bytes are in the file.
malloc a chunk of memory to hold all of the bytes + 1
set the extra byte at the end of the buffer to NUL.
fread the entire file into memory.
create a vector of const char *
push_back the address of the first byte into the vector.
repeatedly
strstr - search the memory block for the carriage control character(s).
put a NUL at the found position
move past the carriage control characters
push_back that address into the vector
until all of the text in the buffer has been processed.
----------------
use the vector to find the strings,
and process as needed.
when done, delete the memory block
and the vector should self-destruct.
Si vous utilisez un fichier texte stockant les entiers, flottants et les petites chaînes, mon expérience est que FILE
, fopen
, fscanf
sont déjà assez vite et vous pouvez également obtenir les numéros directement. Je pense que le mappage de la mémoire est le plus rapide, mais il vous oblige à écrire du code pour analyser le fichier, ce qui nécessite un travail supplémentaire.
- 1. Création de fichiers de lecture de texte uniquement avec python
- 2. Lecture de certaines lignes à partir de fichiers texte
- 3. lecture de texte générique
- 4. Java - Lecture/écriture de fichiers
- 5. Lecture de fichiers MIDI
- 6. Lecture d'un fichier texte
- 7. Lecture et écriture Bits dans des fichiers texte en Java
- 8. Lecture programmée de fichiers PDF en C#
- 9. PHP: Problème avec la lecture de fichiers
- 10. Fichiers batch/lecture de table
- 11. Lecture de fichiers formatés EDI
- 12. iPhone - lecture de fichiers .epub
- 13. Lecture de fichiers à distance
- 14. fichiers binaires d'écriture/lecture
- 15. Lecture d'un fichier texte
- 16. problème avec PHP lecture de fichiers CSV
- 17. Lecture de fichiers en utilisant Python
- 18. Bibliothèque de lecture de fichiers MIDI C++
- 19. Lecture de blocs de texte en perl
- 20. fichiers en lecture/écriture Serrures
- 21. Lecture de fichiers dans un projet .NET
- 22. Lecture de fichiers dans Java Web Start
- 23. Lecture de fichiers wave sous Android
- 24. Lecture de plusieurs fichiers audio sous Android
- 25. Lecture de fichiers avec l'assemblage MIPS
- 26. Lecture de vidéos/fichiers multimédia en C#
- 27. Lecture de longs fichiers ASCII dans C
- 28. Lecture de fichiers audio avec J2ME
- 29. Lecture de fichiers audio dans WPF
- 30. C# Lecture de fichiers 'Zip' avec FileStream
Je pense que vous devriez spécifier le système d'exploitation depuis son OS spécifique plutôt comment lire rapidement. par exemple. Windows autorise les fichiers mappés en mémoire –
La réponse dépend également de ce que vous avez l'intention de faire avec le texte. Et Unix a aussi des fichiers mappés en mémoire. – Omnifarious
Si vous ne faites pas de travail ou si vous faites un projet qui nécessite C++, ne réinventez pas la roue, dans Linux, il y a beaucoup d'outils (en C/C++) qui lisent les fichiers, par exemple grep, awk, etc. vouloir faire cela en C/C++, vous pouvez vérifier leurs sources et voir comment c'est fait. – ghostdog74