Bonjour!
J ai un fichier texte, et je voudrai pouvoir lire la première ligne, et la stocker dans une variable, puis ensuite lire la seconde, la stocker dans une aitre variable,etc..quelq'un peut-il m aider?
-----
Bonjour!
J ai un fichier texte, et je voudrai pouvoir lire la première ligne, et la stocker dans une variable, puis ensuite lire la seconde, la stocker dans une aitre variable,etc..quelq'un peut-il m aider?
Bonjour,
Il faut que tu commences par penser l'algorythme que tu veux créer.
- Ouvrir le fichier,
- Compter le nombre de lignes (dimensionnement de la variable en tableau),
- Déclarer et dimensionner la variable,
- Ouverture d'une boucle,
- Lecture de la 1ère ligne,
- Stockage dans la variable (0)
- incrément de la boucle
- Retour...
A toi de traduire en C++.
Bonne journée.
Ou alors tu peux créer une classe ne contenant qu'une seule variable, string, et instancier un nouvel objet de cette classe à chaque nouvelle ligne. Ça t'évite de compter le nombre de lignes avant.
Oui mais au niveau de la syntaxe ca donnerait quoi?
Bonjour,
voici un bout de code qui fait ce que tu souhaites:
Hope it helps.Code:#include <fstream> #include <string> #include <vector> using namespace std; int main(int argc, char* argv[]) { ifstream file( "dum.txt" ); // le fichier texte vector<string> myStrings; // le vector qui va contenir toutes les chaines de carractères lues if ( file ) // on vérifie si l'ouverture du fichier a réussi { std::string line; //une string qui va contenir temporairement la ligne lue while ( std::getline( file, line ) ) // tant qu'on a pas tout lu, on lit la ligne suivante { myStrings.push_back(line); // on rajoute la ligne lue dans le vector } } return 0; }
ps: désolé pour l'indentation, la balise [code] a tout modifié.
Merci de ton aide! Mais a quel moment est ce que ma variable prend la valeur de la ligne lue?Et en plus je n'arrive pas a voir comment je peux réussir a faire correspondre une variable a chaque ligne...
Bonjour,
Tu pourrais faire un effort , ce programme contient 6 lignes de codes, alors laquelle tu ne comprend pas ? En plus les fonctions ont des noms plutot explicite : GetLine() à ton avis que fait cette fonction ? Et le vecteur Mystrings, que contient-il ?
Ca se passe en 2 temps:
1) std::getline( file, line );
cette instruction lit une ligne du fichier (file) et rempli un objet de type string (line) avec cette ligne.
2) myStrings.push_back(line);
cette instruction "range" la ligne lue (line) dans le vector (un vector c'est comme un tableau C, mais en C++) myStrings.
Le bout de code que je t'ai fourni est une boucle, tu ne pourras donc pas utiliser des variables indépendantes. C'est la raison pour laquelle j'ai mis tout dans un vector.
Si tu veux obtenir des variables séparées, il faudra faire quelque chose comme ça (pas testé):
Remarque: ce code ne fonctionne que si le fichier ne contient que des chaines de caracère. S'il y a des nombres, un petite transformation aprés lecture sera nécessaire.Code:#include <fstream> #include <string> using namespace std; int main(int argc, char* argv[]) { ifstream file( "dum.txt" ); // le fichier texte if ( file ) // on vérifie si l'ouverture du fichier a réussi { string line1; getline( file, line1 ); string line2; getline( file, line2 ); string line3; getline( file, line3 ); // etc... } return 0; }
edit: c'est vrai que tu pourrais faire un effort
Je fais des efforts, mais je part de très très bas...
Désolé pour cette dernière question,mais je peux pas faire autrement: ce que tu m as mis ala fin était exactelment ce que je cherchais a faire, mais comment je peux ensuite insérer,par exemple, le résultat de getline(file,line1) dans une variable?
Ouh, là là !
line1 c'est la variable dans laquelle le résultat de la lecture va...
Eh bien j utilise visual c++. En fait j ai une application que je sauvegarde en enregistrant les valeurs des variables dans un fichier texte, et je veux donc récupérer l'état des variables dans ce même fichier texte lorsque l'utilisateur souhaite charger une sauvegarde.
Et j ai fait:
using namespace std;
ifstream file("toto.txt");
getline(file,nom__variable);
où nom__variable est une variable Cstring de mon application,mais ca ne fonctionne pas...
Déjà Cstring ça n'existe pas. cstring ou CString ok. Dans ton cas, je crois que c'est CString car il me semble que tu utilises la MFC.Eh bien j utilise visual c++. En fait j ai une application que je sauvegarde en enregistrant les valeurs des variables dans un fichier texte, et je veux donc récupérer l'état des variables dans ce même fichier texte lorsque l'utilisateur souhaite charger une sauvegarde.
Et j ai fait:
using namespace std;
ifstream file("toto.txt");
getline(file,nom__variable);
où nom__variable est une variable Cstring de mon application,mais ca ne fonctionne pas...
Dans les bouts de code que je t'ai donné, il s'agit de string (ou std::string, mais comme j'inclus l'espace de nommage std (using namespace std;), pas besoin de std::).
std est l'espace de nommage de la bibliothèque standard c++. La MFC n'est pas compatible avec la lib standard.
Si mon code fonctionne avec des std::string, rien ne permet de savoir s'il va fonctionner avec des CString. Ce serait une sorte de miracle, car ce n'est pas prévu.
Ensuite, lorsque ça ne fonctionne pas, donnes-nous plus de précisions, car nous ne sommes pas devins et il nous est impossible de savoir ce qui ne fonctionne pas s'il nous n'avons pas (au moins):
-> la ligne qui pose problème ainsi que toute la partie du code suceptible d'avoir un lien avec le problème.
-> quel type d'erreur (erreur de compilation, pendant l'exécution, etc.)
-> le message d'erreur du compilateur
Enfin, moi je te propose une solution qui utilises la lib stantard. Si tu souhaites à tout prix utiliser la MFC, je me refuse à t'aider (je considère la MFC comme un véritable danger pour le C++, un truc inutile, lourd, peu fiable et une insulte faite par B.G aux concepteurs du c++), mais tu peux tout de même jeter un coup d'oeil sur la msdn, il y aura tout ce dont tu as besoin (voir classes CString et CStdioFile notemment).
C'st la ligne getline(file,nom__variable); qui pose problème,et apparemment c'est bien un problème du a cstring...Mais je ne cherche pas a tout prix utiliser les mfc,je cherche seulement a fairquelquechose qui marche...
Dans ce cas:
1) Créé un nouveau projet (on l'appellera toto) dans visual (win32, console).
2) Tu efface tout ce qu'il y a dans toto.cpp
3) Tu copie l'intégralité du code que je t'ai posté au 8eme message.
4) Tu vérifie que ça compile
5) Si ça compile, met un point d'arrêt (F9) à la première ligne du main()
6) Exécute pas à pas et regarde ce qu'il se passe.
C'est le meilleur moyen pour apprendre (ou avec les livres)
C'est bon j ai réglé mon problème. j ai fait
Merci de votre aide!Code:using namespace std; ifstream file("toto.txt"); string line1; getline(file,line1); CString str(line1.c__str()); nom__variable=str;
Salut Bob,
Si tu ne prends pas l'habitude de commenter et d'indenter ton code, tu ne vas pas t'y retrouver et tu ne comprendras rien à ce que tu as fait.
Il faut que tu prennes l'habitude d'écrire clairement tes progs... Un simple conseil.
@+ sur le forum.