Enregistrement d'un fichier texte dans une procédure récursive

Enregistrement d'un fichier texte dans une procédure récursive - C++ - Programmation

Marsh Posté le 05-06-2010 à 17:35:22    

Bonjour à tous et déjà merci à ceux qui prendront la peine de me lire.
 
Dans le programme que je fais, j'ai besoin d'une procédure qui permet d'extraire d'un fichier texte (50 millions de lignes) chaque ligne pour la mettre  
 
dans une liste chainée.
 
Pour l'instant j'ai fait une procédure récursive, mais mon problème est là : à chaque tour dans la récursivité il enregistre la première ligne dans
 
la liste chainée. J'ai donc chercher à lire la ligne suivante à chaque tour , mais tous ce que j'ai tenté jusqu'à présent n'a pas fonctionné.  
 
Auriez vous une idée ou une fonction qui me permétrait d'avancer.
 
Voici le programme en question, si cela manque d'info n'hésitez pas à me le faire savoir.
 

Code :
  1. void Extraire_Fichier_txt( dictionnaire &d , int n )
  2. //creer un dictionnaire à partir d'un fichier texte de mots
  3. {
  4. ifstream File("Francais.txt" );
  5. chaine c;
  6. if ( n<(nb_lignes()))
  7. {
  8.  if( !File.fail() )
  9.  {
  10.   File>>c;
  11.   d=new element_dictionnaire;
  12.   d->mot=Transformer_Chaine_En_Mot( c );
  13.   //Transforme chaine de caractère du fichier texte en mot(une autre liste chainée)
  14.   d->suivant=NULL;
  15.   }
  16.  Extraire_Fichier_txt( d->suivant , n+1 );
  17. }
  18. File.close();
  19. }
  20. typedef struct element_dictionnaire * dictionnaire ;
  21. typedef struct element_dictionnaire {
  22.       mot             mot ;
  23.       dictionnaire suivant ;
  24. } element_dictionnaire ;


 
 
Merci d'avance!!

Reply

Marsh Posté le 05-06-2010 à 17:35:22   

Reply

Marsh Posté le 05-06-2010 à 19:10:10    

std::list pour les listes chainées svp

Reply

Marsh Posté le 05-06-2010 à 20:46:48    

Tu ouvres un fichier à chaque appel...
 
Je ne suis pas allergique à la récursivité mais son utilisation pour quelque chose d'itératif me choque et quand il est question de 50 millions d'itérations, je suis assez sceptique quant à la possibilité d'arriver au bout si on n'utilise pas une implémentation changeant elle même la récursivité en itération et si on ne code pas de façon à lui permettre de faire cette transformation.  Ce qui exclus d'office quasiment toute variable ayant un destructeur dans la fonction récursive.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 07-06-2010 à 13:33:21    

Pareil, je trouve très bizarre d'être passé par du récursif là où la logique de l'algo montre clairement que c'est de l'itératif :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 09-06-2010 à 10:36:38    

tout à fait.
et en plus 50 millions de lignes, imaginons que l'on ait des lignes de 50 caracteres: > 2.5 Go de RAM
donc si il compile pas en 64 bits ca marchera jamais.


Message édité par Lightness1024 le 09-06-2010 à 10:37:25

---------------
http://projets.6mablog.com/
Reply

Marsh Posté le 09-06-2010 à 11:39:59    

Et surtout les 50M d'appels de la fonction qui vont se mettre sur la pile ça va être joyeux comme truc !

Reply

Marsh Posté le 09-06-2010 à 12:12:12    

ca rentre pas. la pile doit faire 1Mo par defaut.


---------------
http://projets.6mablog.com/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed