Fichiers textes volumineux C/C++
Résolu
liloon
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
niveau débutant, C/C++.
Bonjour,
J'ai réalisé un programme qui traite les données issues d'un .txt.
Je commence d'abord par supprimer les lignes inutiles du .txt en disant
que si le nbre de caractères de la ligne est < 14 =>je ne passe pas la ligne ds mon buffer.
Lorsque mon fichier .txt fait moins de 30 000 lignes le temps de traitement reste raisonnable.
Mais mes fichiers ont 150 000 lignes et 44 éléments par ligne !!!
Comment je peux faire pour traiter mes données?
Merci d'avance.
Bonjour,
J'ai réalisé un programme qui traite les données issues d'un .txt.
Je commence d'abord par supprimer les lignes inutiles du .txt en disant
que si le nbre de caractères de la ligne est < 14 =>je ne passe pas la ligne ds mon buffer.
Lorsque mon fichier .txt fait moins de 30 000 lignes le temps de traitement reste raisonnable.
Mais mes fichiers ont 150 000 lignes et 44 éléments par ligne !!!
Comment je peux faire pour traiter mes données?
Merci d'avance.
A voir également:
- Fichiers textes volumineux C/C++
- Comment réduire un fichier trop volumineux - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
10 réponses
salut !
le must pour traiter des fichiers texte ou des log de serveur etc etc pour moi c'est le langage Perl ....
ça atomise le c/c++ ... ça enterre le php .....le python etc
je pense que ça ne t'aide pas dans l'immédiat, mais c'est toujours bon à savoir ...
le must pour traiter des fichiers texte ou des log de serveur etc etc pour moi c'est le langage Perl ....
ça atomise le c/c++ ... ça enterre le php .....le python etc
je pense que ça ne t'aide pas dans l'immédiat, mais c'est toujours bon à savoir ...
Salut, j'ai eu un problème proche de ça je te propose comment je l'ai résolu peut être t'aideras.
J’ai divisé mon fichier de données à des fichiers que je l'ai mis tous dans un fichier tu le fait manuellement ou tu programme un petit code c'est facile. Puis tu traite dans ton programme tout les fichiers dans ce dossier.
J’ai divisé mon fichier de données à des fichiers que je l'ai mis tous dans un fichier tu le fait manuellement ou tu programme un petit code c'est facile. Puis tu traite dans ton programme tout les fichiers dans ce dossier.
Salut.
Je n'ai pas ta réponse, mais quelques réflexions.
Si je comprends bien, tu met tout ton fichier en mémoire, si c'est le cas, le problème peu venir de là, essai de charger seulement une partie du fihier, de le raité, de vider la mémoire puis de continuer.
Car en est-ce vraiment la taille de ton fichier qui rend long, ou la quantité de données stocker en mémoire ? Si tu fractionne ton fichier, chaque segment sera traiter plus vite, mais le tout le sera til ?
Sans le code, il est difficile de se faire une idée, il est possible que tu fasse une énormité conduisant à ce ralentissement.
Je n'ai pas ta réponse, mais quelques réflexions.
Si je comprends bien, tu met tout ton fichier en mémoire, si c'est le cas, le problème peu venir de là, essai de charger seulement une partie du fihier, de le raité, de vider la mémoire puis de continuer.
Car en est-ce vraiment la taille de ton fichier qui rend long, ou la quantité de données stocker en mémoire ? Si tu fractionne ton fichier, chaque segment sera traiter plus vite, mais le tout le sera til ?
Sans le code, il est difficile de se faire une idée, il est possible que tu fasse une énormité conduisant à ce ralentissement.
En effet je passe tt dans le buffer et mon .txt fait 10 Mo. Hmm, je vois ce que tu vx dire mais je ne vois pas encore comment mettre en oeuvre la partie "essai de charger seulement une partie du fichier" à part séparer le fichier comme le suggère amirah. Mais mais je cherche ;) merci. voilà l'extrait du code:
//Effacer toute les lignes contenant - de 13 caractères
//C'est à dire toutes les différentes de la matrice image
std::ifstream ReadMovieFile( inputfile );
if (ReadMovieFile) //Si le fichier est trouvé
{
std::string line;
int Line = 0;
while ( std::getline( ReadMovieFile, line)) //Parcourir le fichier et initialiser line à la ligne actuelle
{
Line++;
if(line.size()>13) // Si la ligne atteinte est différente de la ligne à supprimer...
{
Buffer += line + "\n"; //Rajouter le contenu
}
}
}
ReadMovieFile.close(); //On ferme le fichier en lecture
std::ofstream WriteMovieFile( inputfile ); //Ouvrir en écriture
WriteMovieFile << Buffer;
WriteMovieFile.close(); //Fin
//Effacer toute les lignes contenant - de 13 caractères
//C'est à dire toutes les différentes de la matrice image
std::ifstream ReadMovieFile( inputfile );
if (ReadMovieFile) //Si le fichier est trouvé
{
std::string line;
int Line = 0;
while ( std::getline( ReadMovieFile, line)) //Parcourir le fichier et initialiser line à la ligne actuelle
{
Line++;
if(line.size()>13) // Si la ligne atteinte est différente de la ligne à supprimer...
{
Buffer += line + "\n"; //Rajouter le contenu
}
}
}
ReadMovieFile.close(); //On ferme le fichier en lecture
std::ofstream WriteMovieFile( inputfile ); //Ouvrir en écriture
WriteMovieFile << Buffer;
WriteMovieFile.close(); //Fin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
essai un truc du genre :
//Effacer toute les lignes contenant - de 13 caractères //C'est à dire toutes les différentes de la matrice image std::ifstream ReadMovieFile( inputfile ); std::ofstream WriteMovieFile( outputfile ); //Ouvrir en écriture if (ReadMovieFile) //Si le fichier est trouvé { std::string line; int Line = 0; while ( std::getline( ReadMovieFile, line)) //Parcourir le fichier et initialiser line à la ligne actuelle { Line++; if(line.size()>13) // Si la ligne atteinte est différente de la ligne à supprimer... { WriteMovieFile << line + "\n"; //Rajouter le contenu } } } ReadMovieFile.close(); //On ferme le fichier en lecture WriteMovieFile.close(); //Fin rename(outputfile,inputfile);//renomme le fichier temporaire en fichier sourcelà tu ne devrai plus avoir de souci de perf
Merci Char Snipeur ça marche impec!
En effet, je perds inutilement du temps en passant par mon buffer. Je me ss obstiné à utiliser un seul fichier .txt.
Now 200 000 lignes * 44 colonnes en à peine 20-25 s.
Par contre, si quelqu'un à un tuto, un lien ou un post intéressant sur la concaténation de .txt en C/C++, je ss preneur.
J'imagine qu'il doit y avoir une fonction optimisée pr ça mais pr l'instant j'ai trouvé que des infos pr DOS sinon je passerai par ifstream et ofstream pr lire les fichiers et les écrire les uns à la suite des autres ds un meme .txt mais je sens que c'est la meilleure chose à faire...
En effet, je perds inutilement du temps en passant par mon buffer. Je me ss obstiné à utiliser un seul fichier .txt.
Now 200 000 lignes * 44 colonnes en à peine 20-25 s.
Par contre, si quelqu'un à un tuto, un lien ou un post intéressant sur la concaténation de .txt en C/C++, je ss preneur.
J'imagine qu'il doit y avoir une fonction optimisée pr ça mais pr l'instant j'ai trouvé que des infos pr DOS sinon je passerai par ifstream et ofstream pr lire les fichiers et les écrire les uns à la suite des autres ds un meme .txt mais je sens que c'est la meilleure chose à faire...
si tu ouvre ton fichier en "append", ton pointeur se met directement à la fin du fichier, et comme ça, tu lit le deuxième et écris directement dans le premier. Je ne suis pas sur qu'il y ai forcément plus rapide, car je pense (à vérifier) qu'une concaténation nécessite le déplacement de données.