C++ extraire les données d'un .txt
Piefec
-
Pierre.fecht -
Pierre.fecht -
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... :
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!!
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!!
A voir également:
- C++ extraire les données d'un .txt
- Fuite données maif - Guide
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Supprimer les données de navigation - Guide
- Extraire image pdf - Guide
3 réponses
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 ?
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 ?
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
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
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 :
comme ça tu mets tes doubles à la suite sans te soucier de la taille (c'est super le C++ ;)
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++ ;)