fopen multiples dans une boucle, comment mieux faire ?

fopen multiples dans une boucle, comment mieux faire ? - C - Programmation

Marsh Posté le 26-10-2003 à 20:17:01    

Voila, je dois lire un fichier log (pour ça, pas de soucis, fgets, fscanf et tout, ça passe impec' ) puis enregistrer les résultats dans des fichiers séparés de la forme "date nom.txt".
 
Ex. :

Citation :


2003-10-26 Truc: han
2003-10-26 Machin: patapai
2003-10-26 Truc: blah
2003-10-26 Machin: blop
2003-10-26 Bidule: vtff
2003-10-26 Truc: dtc
2003-10-27 Truc: haha
2003-10-27 Bidule: hoho
2003-10-27 Machin: texte
2003-10-27 Machin: ici aussi


 
J'y arrive plutôt bien, mais le problème c'est que la seule solution que j'ai trouvé était d'ouvrir le fichier (en "a+" ) puis de le fermer, et ce à chaque lecture de ligne, pour obtenir mes fichiers "2003-10-26 Truc.txt", "2003-10-26 Machin.txt", "2003-10-26 Bidule.txt", etc.
 
Le code fautif :
 

Code :
  1. while(fgets(buf, sizeof(buf), IN))
  2.   {
  3.     if(sscanf(buf, "...", ...) == 7) //le sscanf qui va bien
  4.     {
  5.       sprintf(path, "%4s-%2s-%2s CC %s.txt", an, mois, jour, nom); //on passe la date dans un format pas trop moche
  6.      
  7.       //c'est ici que ça craint
  8.       OUT = fopen(path, "a+" );
  9.       fprintf(OUT, "%s %s: %s\n", heure, nom, texte);
  10.      
  11.       fclose(OUT);
  12.     }
  13.   }


 
Il peut y avoir un nombre de noms quasi illimité, si jamais ça peut servir.
 
J'ai pensé à stocker mes noms de fichier dans un tableau pour faire plein de fclose() à la fin du traitement mais je devrais vérifier avant chaque fopen si le fichier est déjà ouvert. (remarque, ça ne peut pas être pire que ce que j'ai maintenant...)
 
C'est la seule alternative qui me vient à l'esprit, mais je ne l'ai pas encore essayée.
 
Donc si quelqu'un a une meilleure idée, ce serait vraiment sympa de m'aiguiller un peu, car j'ai un peu de mal. :'(

Reply

Marsh Posté le 26-10-2003 à 20:17:01   

Reply

Marsh Posté le 26-10-2003 à 20:21:16    

Je ne sais pas ce que tu veux faire, mais l'idéal serait de stocker ça dans une base de données et de faire tes sorties de données avec un select. Bref, mysql et tu codes l'interface vers la base en C, ou tu utilises une lib sql gratos.
 
Sinon, tu vas te faire très chier.

Reply

Marsh Posté le 26-10-2003 à 20:27:53    

Bha le truc c'est que mes logs sont dans des fichiers .txt pouvant aller jusqu'à 50, 100, ou je ne sais pas combien de Mo (les logs proviennent d'un autre prog', je retraite derrière pour m'y retrouver).
 
J'aurais bien voulu une base SQL, mais j'ai que ça sous la main. :/

Reply

Marsh Posté le 26-10-2003 à 20:36:42    

Si tu fais une liste de tes fichiers ouverts (association nom / FILE*), il faut pas oublier que la recherche dans ta liste va prendre du temps.
Il faut voir si la recherche est plus rapide que faire un fopen/fclose.
 
Il me semble aussi que sous certains OS, on est limité en nombre de descripteurs de fichiers par process.
 
La solution que tu utilises me parait pas trop mal étant donné qu'elle est simple et directe.

Reply

Sujets relatifs:

Leave a Replay

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