C++ extraire les données d'un .txt

Fermé
Piefec - 23 nov. 2011 à 10:34
 Pierre.fecht - 24 nov. 2011 à 09:45
Bonjour,

J'ai un probleme avec mon code je ne comprend pas comment je dois m'y prendre: je voudrais lire un document .txt contenant un chiffre (de type 1.584122) par ligne (sur plus de 1500 ligne) et enregistrer automatiquement ces chiffres dans un tableau.
J'ai écris le code suivant mais je pense avoir fais une erreur dans les conversion de string a int... :
int main()
{
    
    ifstream file("Chiffres.txt",ios::in); 
    
    int NBlines = 0; 
       if ( file ) // Open file ? 
       {
           while ( file.ignore( numeric_limits<int>::max(), '\n' ) ) 
           { 
                 NBlines++; 
           }                                                                      
       } 
       
       string line;
       int x[NBlines];
       int i=0;
       
       while ( NBlines > i)
       {     
             getline (file, line);
             cout << line << endl;
             atoi(line.c_str()) >> x[i] ;
             cout << x[i] << endl;
             i++;
       }   
    cout << "There is " << NBlines << " Lines"<< endl;
    cout << "Read File done" << endl;
}

Pour lire ma ligne je dois utiliser un string ? ou je peux directement placer ma ligne dans un int ? les valeurs qui ressortent de mon .txt et celle affiché ne correspondent pas du tout ... avez vous une explication ?

Merci d'avance!!

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
23 nov. 2011 à 10:49
je ne comprends rien à ce que tu fait.
C'est quoi ce NBlines, cette boucle infinie.
tu donnes un exemple de flottant mais tu cherches à lire des entiers !
plutôt que d'utiliser atoi, pourquoi ne mets tu pas directement ta lecture de fichier dans une variable ?
0
Pierre.fecht
24 nov. 2011 à 07:49
En faite au début je veux compter le nombre de ligne de mon document (NBlines), avec une variable par ligne j'obtiens donc mon nombre de variable pour dimensionner mon tableau dans lequel je vais enregistrer ces précédentes.
Le code pour compter les lignes n'est pas de moi, j'avoue ne pas vraiment le comprendre ...
j'utilisais atoi car mes variables étaient placées dans un string que je devais donc convertir pour le mettre dans un double ... problème résolu avec le nouveau code que j'ai écris :

<code>

void readdata()
{
ifstream file ("Data.txt", ios::in);
if ( file ) // Open file ?
{

string buffer;
int i=0;

while (std::getline(file, buffer))
{
double line;
file >> line;
y[i] = line;
//cout << "X[ " << i << "] = "<< x[i] << endl;
i++;

}
}
else{cerr << "Impossible d'ouvrir le fichier Data.txt !" << endl;}
file.close();

}

<code>

Cependant je dois donner une valeur fixe a mon tableau que je connais plus ou moins d'avance... et cela ne me plais pas , comment pourrais je adapter automatiquement mon tableau a la bonne dimension et cela en le laissant comme variable global ? de plus ici je dois utiliser un buffer qui enfaite me sert juste a limiter ma boucle au bon nombre d'itérations , cela me plais pas mais je ne vois pas d'autre moyen... en déterminant mon nombre de variable je pourrai dimensionner mon tableau et limite mon while proprement... Sais tu comment faire cela ?
cordialement
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
24 nov. 2011 à 08:11
Salut.
C'est mieux ainsi.
Comme tu fait du C++, ne te prends pas la tête, utilise la STL : list ou vector.
Un truc dans le genre :
double line;
std::list<double> y;
while (file)
{
    file >> line;
    y.push_back(line);
} 

comme ça tu mets tes doubles à la suite sans te soucier de la taille (c'est super le C++ ;)
0
Pierre.fecht
24 nov. 2011 à 09:45
Merci beaucoup !!! tu m'as bien aidé!
a plus :}
0