Lecture fichier texte

SnakeEyes38 Messages postés 3 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 27 mai 2009 - 26 mai 2009 à 10:44
SnakeEyes38 Messages postés 3 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 27 mai 2009 - 27 mai 2009 à 09:36
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

plasttoon Messages postés 12 Date d'inscription mercredi 19 novembre 2008 Statut Membre Dernière intervention 1 septembre 2009
26 mai 2009 à 17:44
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+
0
SnakeEyes38 Messages postés 3 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 27 mai 2009
26 mai 2009 à 19:38
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.
0
SnakeEyes38 Messages postés 3 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 27 mai 2009
27 mai 2009 à 09:36
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
0
Rejoignez-nous