Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
885 connectés 

  FORUM HardWare.fr
  Programmation
  C

  fopen multiples dans une boucle, comment mieux faire ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fopen multiples dans une boucle, comment mieux faire ?

n°551026
meerthyl
Posté le 26-10-2003 à 20:17:01  profilanswer
 

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. :'(

mood
Publicité
Posté le 26-10-2003 à 20:17:01  profilanswer
 

n°551028
youdontcar​e
Posté le 26-10-2003 à 20:21:16  profilanswer
 

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.

n°551035
meerthyl
Posté le 26-10-2003 à 20:27:53  profilanswer
 

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. :/

n°551042
SquiZZ
Posté le 26-10-2003 à 20:36:42  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  fopen multiples dans une boucle, comment mieux faire ?

 

Sujets relatifs
eviter une requete dans une boucle?[algo] problème d'inclusion de boucle
Vous connaissez Visual SourceSafe? Si oui, vous connaissez mieux?[.net] pb de boucle ...
Urgent... Multiples instances Tomcat[résolu]variables provenant d'un <select> à choix multiples
Votre bout de code le mieux faitInteruption d'une boucle / J'apprends à faire un while
Vos meilleurs links pour réaliser batch et comprendre mieux le shell[SGBD/Mysql] Choix multiples et stockage en BDD
Plus de sujets relatifs à : fopen multiples dans une boucle, comment mieux faire ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR