Lecture fichier texte

Signaler
Messages postés
3
Date d'inscription
lundi 13 octobre 2008
Statut
Membre
Dernière intervention
27 mai 2009
-
Messages postés
3
Date d'inscription
lundi 13 octobre 2008
Statut
Membre
Dernière intervention
27 mai 2009
-
Bonjour et désolé de vous déranger.
J'ai un petit probleme pour lire un fichier txt.


Mon fichier texte se présente sous cette forme :
aa -3.667 -6.5 -4.746 -5.583 -4.31 -8.939 -7.313 -3.121 3
bb -6.31 -5.983 -5.702 -6.281 -6.387 -2.43 -5.804 -2.197 3
cc -7.592 -11.88 -7.021 -13.184 -7.415 -6.057 -7.073 -5.095 3
dd -7.254 -10.573 -6.832 -10.44 -7.846 -4.654 -6.925 -4.157 3
ee -7.07 -12.092 -6.542 -12.282 -6.977 -3.367 -6.783 -3.688 3
ff -8.212 -12.33 -7.42 -13.693 -6.996 -4.344 -6.435 -4.888 3
gg -6.763 -12.332 -6.435 -13.87 -7.258 -5.338 -6.859 -5.287 3
hh -7.973 -10.097 -7.548 -11.709 -7.757 -3.145 -7.588 -3.277 3
ii -7.108 -8.386 -6.33 -9.686 -6.509 -2.389 -6.202 -2.771 3


J'aimerais récupérer les valeurs d'une ligne pour les utiliser après.
Pour l'instant, je fais de cette manière mais c'est vraiment laborieux. Si vous avez une autre solution, je suis preneur.


if (is_readable("C:bddAcoustique.txt")){
  ifstream fichier_lu("C:bddAcoustique.txt");
  string nom_matiere = "cc"; //l'utilisateur peut demander autre chose que "cc"
  string line;
  string value;
  while(getline(fichier_lu,line)){
    if(line.find(nom_matiere)==0){
      value = line.substr(0,line.find("n"));
      ofstream file("C:fichier2.txt");
      file << value;
    }
  }
  ifstream fichier2_lu("C:fichier2.txt");
  string str;
  double Z[8];
  if (!fichier2_lu.eof()) {
    for (int i=0; i < 10; ++i) {
      string tmp;
      fichier2_lu >> tmp;
      if (i != 0 &amp;&amp; i!=9) {
        istringstream iss(tmp);
        iss >> Z[i-1];
      }
    }
}



En fait je lis la ligne qui corespond à "cc" (ou ca peut etre autre chose) et je l'ecris dans un fichier. Ensuite je lis ce nouveau fichier qui contient que la ligne qui m'interesse et je transforme les string en double. Pour chaque ligne, je n'ai besoin que des valeurs 1 à 8.


Merci de me donner un coup de pousse car je suis dans le flou le plus complet.

3 réponses

Messages postés
12
Date d'inscription
mercredi 19 novembre 2008
Statut
Membre
Dernière intervention
1 septembre 2009

met ton fichier dans un tableau dynamique et analyse le par la suite(c'est plus rapide si tu utilise seulement du c++ natif, et évite le tas manager si ton texte deviens colossale).
char** tab
avec (fichier >> tab[i][j])
if(tab[1][0] == c && tab[1][1] == c) voicie ta ligne;
comme sa tu ferme ton fichier des que posible et tu as tou le loisir d'analiser son contenue a ta gise, Ha! oui et si tu sais vraiment ce que tu veux faire avec ton code, utilise la commende switch, s'est plus jolie a lire  

vas etudier tes sokket pour l'analise de ton tableau
if(tab[a][b] != NULL  )b++;
else ananalisetab[c] = tab[a][b];

voillas je t'evite la theorie sur les tableaus dinamique mais si tu as des question vien me les poster
a+
Messages postés
3
Date d'inscription
lundi 13 octobre 2008
Statut
Membre
Dernière intervention
27 mai 2009

Merci de me répondre.

Le problème c'est que là, j'ai pris comme
exemple "cc" mais mes lignes peuvent commencer par "pom0900" ou autre
chose. Les longueur ne sont pas les mêmes.
Je pensedonc que je ne peut pas utiliser ta méthode.
Messages postés
3
Date d'inscription
lundi 13 octobre 2008
Statut
Membre
Dernière intervention
27 mai 2009

Merci pour le temps passé, j'ai trouvé ma solution




ifstream fichier_lu("C:\\bddAcoustique.txt");


double Z[8];


while(getline(fichier_lu,line)){


      istringstream ss(line); // on cree un stringstream pour recuperer les valeurs de la ligne


      string keyvalue; // la string qui va contenir la clef de la ligne


      ss >> keyvalue; // on recupere la clef de la ligne


           if(keyvalue==nom_matiere) {// on la compare a la clef a trouver


                for (int i=0; i<8; i++)


                     ss >> Z[i]; //on recupere les 8 valeurs suivantes de la ligne


           break; //on sort du while


           }


}









A+ et encore merci