Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Fichiers textes volumineux C/C++

liloon, le jeudi 17 juillet 2008 à 22:10:48
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.
Configuration: Windows XP
Internet Explorer 7.0
Répondre à liloon  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Spylk, le jeudi 17 juillet 2008 à 22:19:24
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 ...
Répondre à Spylk

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
amirah, le jeudi 17 juillet 2008 à 22:20:46
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.
Répondre à amirah

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
liloon, le jeudi 17 juillet 2008 à 22:50:15
J'y ai pensé mais je voulais justement éviter de faire des sous fichiers puis faire une concaténation mais si jamais je ne trouve pas de solution par exemple peut etre un format plus rapide à traiter je ferai peut etre ça mais je trouve pas ça pratique :s

Merci kan meme!
Répondre à liloon

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Char Snipeur, le vendredi 18 juillet 2008 à 08:28:50
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. Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur
Répondre à Char Snipeur

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
liloon, le mardi 22 juillet 2008 à 22:17:01
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
Répondre à liloon

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
cchristian, le mercredi 23 juillet 2008 à 00:49:17
Bonsoir,

Je ne comprends pas pourquoi tu charges ton fichier en mémoire ? Cordialement.

Cchristian.
Répondre à cchristian

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Char Snipeur, le mercredi 23 juillet 2008 à 10:39:22
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 source
là tu ne devrai plus avoir de souci de perf Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur
Répondre à Char Snipeur

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
liloon, le jeudi 24 juillet 2008 à 13:04:56
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...
Répondre à liloon

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Char Snipeur, le jeudi 24 juillet 2008 à 15:21:23
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. Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur
Répondre à Char Snipeur

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
liloon, le jeudi 24 juillet 2008 à 20:06:53
Ok je v essayé ça ce w.e ça devrait etre assez rapide. Par curiosité je v continuer à chercher une autre soluce en C++. Par ailleurs, j'ai lu qu'il y avait des ptits logiciels qui font de la concaténation de fichiers.
Bon ben... pb résolu on va dire!!
Merci bcp Char Snipeur!!
Répondre à liloon

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Char Snipeur, le vendredi 25 juillet 2008 à 08:50:30
le plus simple pour concaténé fic2 à la suite de fic1, c'est
type fic2>>fic1 sous windows
cat fic2>> fic1 sous linux. Ces petits logiciels sont standard. Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur
Répondre à Char Snipeur
[C#] Fichier texte (Résolu)Bonjour, Mon problème est que je crée un fichier texte avec CreateText et que cela bug parfois. Est ce parce que je lis avec streamReader? Devrai-je utiliser TextRead? Au début je le mettai en fichier caché avec SetAttribute mais il me mettait tout le... www.commentcamarche.net/forum/affich-7577287-c-fichier-texte
C++ lire la n-ieme ligne d'un fichier texte (Résolu)salut, je veux savoir comment je peux lire la n-ieme ligne d'un fichier texte en c++ est ce que quelqu'un serait comment faire? merci d'avance www.commentcamarche.net/forum/affich-7356063-c-lire-la-n-ieme-ligne-d-un-fichier-texte
Crer fichier texte en dos (Résolu)Bonjour je cherche des astuces pour editer un fichier texte automatiquement : ce serait en dos, le lui rentrerai des infos, par exemple le nom et le prénom puis il me les ressort en fichier text sous une autre forme du genre Bienvenu Monsieur "Nom"... www.commentcamarche.net/forum/affich-2839916-crer-fichier-texte-en-dos
[MS-Dos] Ecrire dans un fichier texte en batchPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" :echo texte_à_ecrire > fichier_de_sortie.txtPour écrire à la fin d'un texte existant (concaténation) :echo "ecriture a la fin du fichier ">> fichier_de_sortie.txt www.commentcamarche.net/faq/sujet-2695-ms-dos-ecrire-dans-un-fichier-texte-en-batch
[RegExp] Récupérer une adresse IPFinalité Mise en œuvre Explications Interprétation du motif Récupérer une adresse IP Finalité Pour récupérer une IP dans un fichier texte, fichiers journaux, pages web, etc. Mise en œuvre L'expression régulière suivante combinée à la... www.commentcamarche.net/faq/sujet-911-regexp-recuperer-une-adresse-ip
[Gravure] Graver ou lire un fichier .BIN / .CUELes fichiers .bin et .cue sont respectivement : .BIN : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier .CUE : informations sur les pistes du disque. Les fichiers .BIN / .CUE sont utilisables par... www.commentcamarche.net/faq/sujet-2963-gravure-graver-ou-lire-un-fichier-bin-cue
Parser un fichier Texte (Résolu)Bonjour, Alors voila je vous explique le problème, j'ai un fichier texte sous cette forme la : ?,Alala,Balala,Calala,Dalala,Elala,Falala,Galala,Halala Nom1,a1,b1,c1,d1,e1,f1,g1,h1 Nom2,a2,b2,c2,d2,e2,f2,g2,h2 Nom3,a3,b3,c3,d3,e3,f3,g3,h3... www.commentcamarche.net/forum/affich-7433825-parser-un-fichier-texte
Lire dans un fichier texte (Résolu)Bonjour, en faite je cherche a lire dans un fichier texte en c les caracteres l'un apres l'autre et pas tous en meme tps par exemple mon fichier texte contient "12322123" et dans mon programme je voudrais lire 1 puis 2 puis 3 puis 2 etc...... www.commentcamarche.net/forum/affich-4011476-lire-dans-un-fichier-texte
Comment lancer un fichier texte en C++ (Résolu)Bonjour à tous, Comme dit dans le titre je voudrai lancer un fichier .txt à partir d'un programme principal. Je m'explique, j' ai envie d'effacer une ligne dans un fichier texte et pour "le fun" je veux pouvoir le faire avec la... www.commentcamarche.net/forum/affich-2014571-comment-lancer-un-fichier-texte-en-c
Avanquest FineReader OCR 9.0 ProAvanquest FineReader OCR 9.0 Pro,,''FineReader OCR 9.0 Pro'' Application OCR, permet de convertir les fichiers PDF, documents papiers (scannés), images scannées et photos numériques en fichiers texte modifiables, CD-ROM en Français pou www.commentcamarche.net/guide-achat/avanquest-finereader-ocr-9-0-pro-469198731-fiche-technique
L'assembleur - Fichier source et compilation Le programme doit être saisi dans un fichier texte non formaté (c'est-à-dire sans caractères en gras, souligné, avec des polices de caractères de différentes tailles, ...) appelé fichier source. En effet, l'assembleur (le programme permettant de... www.commentcamarche.net/asm/source.php3
Extensions de fichiers Un fichier est une suite d'informations binaires, c'est-à-dire une suite de 0 et de 1. Ce fichier peut être stocké pour garder une trace de ces informations. Un fichier texte est un fichier composé de caractères stockés sous la forme d'octets. Ce... www.commentcamarche.net/fichier/extension.php3
Systèmes d'exploitation - Fichiers Un fichier est une suite d'informations binaires, c'est-à-dire une suite de 0 et de 1. Ce fichier peut être stocké pour garder une trace de ces informations. Un fichier texte est un fichier composé de caractères stockés sous la forme d'octets. Ce... www.commentcamarche.net/systemes/fichier.php3
Toutes les réponses pour « fichiers textes volumineux C/C++ »