Lire des Données Numériques à partir d'un Fichier Texte en C++
Par exemple, si les données dans un fichier texte externe est comme ceci:
45.78 67.90 87
34.89 346 0.98
Comment puis-je lire ce fichier texte et d'attribuer à chaque nombre à une variable en c++?
À l'aide de ifstream, je suis en mesure d'ouvrir le fichier texte et de les assigner premier nombre à une variable, mais je ne sais pas comment lire le prochain numéro de après la les espaces.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
float a;
ifstream myfile;
myfile.open("data.txt");
myfile >> a;
cout << a;
myfile.close();
system("pause");
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int data[6], a, b, c, d, e, f;
ifstream myfile;
myfile.open("a.txt");
for(int i = 0; i << 6; i++)
myfile >> data[i];
myfile.close();
a = data[0];
b = data[1];
c = data[2];
d = data[3];
e = data[4];
f = data[5];
cout << a << "\t" << b << "\t" << c << "\t" << d << "\t" << e << "\t" << f << "\n";
system("pause");
return 0;
}
- Votre fichier texte contient les chars, mais vous essayez de les lire en int array (). Qui ne fonctionnent pas comme prévu. La question est très floue, qu'essayez-vous de réaliser? Peut-être écrire votre entrée et de sortie, vous vous attendez à être retourné.
- Et accepter les réponses, si elles réellement résoudre votre problème 🙂 les Gens sont rarement regarder dans a répondu à des questions de fournir plus d'aide.
- la simple description de mon problème est " Un fichier texte contient les numéros de 100 lignes * 100 colonnes (par exemple). Maintenant, je veux que mon programme à ramasser ,par exemple , un certain nombre de 60e de ligne et 97e colonne et ensuite affecter cette valeur à une variable et d'effectuer certains calculs avec cette variable. Je tiens donc à ramasser des nombres aléatoires à partir d'un fichier texte qui contient beaucoup de chiffres. comment puis-je faire ?? merci pour le patient répond 🙂
- Enfin! C'est ce que nous attendions 🙂 je vais modifier ma réponse sous peu.
- merci. C'était vraiment utile !!
- Je suis intéressé par ta première solution, mais le problème est de savoir comment dois-je sauter certain nombre de valeurs et de ramasser le besoin d'un ?? Je veux dire que je peux le faire avec une boucle, mais dans ce cas, ma matrice serait très grande. Je veux que mon tableau ne devrait contenir que les valeurs (de milliers dans le fichier texte) dans lequel je suis intéressé !!
- system("pause"), hein?
Vous devez vous connecter pour publier un commentaire.
Répétez >> lit en boucle.
Résultat:
45.779999 67.900002 87.000000 34.889999 346.000000 0.980000
Si vous connaissez exactement, combien il y a d'éléments dans un fichier, vous pouvez la chaîne d' >> opérateur:
Edit: En réponse à vos commentaires à la question principale.
Vous avez deux options.
Edit: Comment faire pour ignorer les valeurs dans le fichier
De choisir le 1234th valeur, utilisez le code suivant:
>>
ou<<
?Cela peut dépendre, en particulier si votre fichier possède le même nombre d'éléments dans chaque ligne ou pas. Si ça va, alors vous voudrez probablement une matrice 2D de la classe, de la sorte, habituellement quelque chose comme ceci:
Noter que, comme il est écrit, cela suppose que vous connaissez la taille que vous aurez besoin d'up-front. Qui peut être évité, mais le code est un peu plus grand et plus complexe.
En tout cas, à lire les chiffres et de maintenir la structure d'origine, vous devez généralement lire une ligne à la fois dans une chaîne de caractères, puis utiliser un stringstream de lire les numéros de la ligne. Cela vous permet de stocker les données de chaque ligne dans une ligne distincte dans votre tableau.
Si vous ne connaissez pas la taille à l'avance ou (et surtout) si elle est différente de lignes peut-être pas tous contiennent le même nombre de chiffres:
Vous pourriez vouloir utiliser un
std::vector<std::vector<double> >
à la place. Ce n'imposer que des frais généraux, mais si différentes lignes peuvent avoir des tailles différentes, il est un moyen facile de faire le travail....ou modernes (C++11) compilateur, vous pouvez utiliser des crochets pour
line
s'initialisation:std::vector<double> line{std::istream_iterator<double>(buffer),{})
, en remplacement destd::istream_iterator<double>()
avec{}
.L'opérateur d'entrée pour le nombre saute leader d'espaces, de sorte que vous pouvez simplement lire le numéro en boucle:
a
sera 45.78, la prochaine fois 67.90, puis 87, puis 34.89, 346, et le temps final de 0,98. N'est-ce pas ce dont vous avez besoin?"45.78 67.90 87\n34.89 346 0.98"
. Si l'opération d'entrée sera toujours lire le numéro suivant dans le flux, dans la "colonne" ordre pour ainsi dire.vous avez pu lire et à écrire à un séparément comme les autres.
Mais si vous voulez écrire dans le même, vous pouvez essayer ceci: