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?
le C++ ne connait pas la notion de lignes...Envoyé par rodgeurette
par contre, si tu veux parler de ce qui est contenu entre deux '\n', la on peut se comprendre.
as tu regardé la doc de la classe std::ifstream, et particulierement de sa fonction getline() ?
Tout ça est expliqué dans la FAQ.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
C'est quand même assez contradictoire de dire ça, puis de conseiller d'utiliser une fonction qui s'appelle getlinele C++ ne connait pas la notion de lignes...![]()
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
sauf que getline() prend un parametre par défaut (de valeur '\n') mais qui peut etre changéEnvoyé par Laurent Gomila
Donc c'est encore mieux que de pouvoir lire que "ligne par ligne" car on peut lire des blocs de caractères séparés par un séparateur précis.
Tu y vois un problème ? Faut le vouloir![]()
Du moment où l'on parle de \n, on parle de lignes de toute manière ...
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
ça peut t'aider :
Exemple : Read and display a text file line by line.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include <iostream> #include <fstream> using namespace std; int main(int argc, char *argv[]) { if(argc != 2) { cout << "Usage: Display <filename>\n"; return 1; } ifstream in(argv[ 1 ]); // input if(!in) { cout << "Cannot open input file.\n"; return 1; } char str[ 255 ]; while(in) { in.getline(str, 255); // delim defaults to '\n' if(in) cout << str << endl; } in.close(); return 0; }
Très bon exemple de comment il ne pas faire, Sceener. Pour la solution correcte, voir la FAQ.
Salut,
@ Screener==>
De manière à ce que tu puisse corriger tes erreurs, voici quelques explications qui te permettront de les comprendre:
Ton code
sous-entend que, au pire, ta ligne fera 254 caracteres (vu qu'il faut le '\0' pour la terminer)
Code : Sélectionner tout - Visualiser dans une fenêtre à part char str[255];
Or, il n'y a strictement rien qui empeche d'avoir un fichier texte dont la ligne prend (tres) largement plus que 254 caracteres avant le retour à la ligne
Le problème, c'est que, meme si tu décidait de mettre 65535, voire, pourquoi pas, un nombre encore plus élevé, tu ne serait toujours pas sur de prévoir une place suffisante, et, d'aucun s'écriraient à ce moment là que, de plus, tu va monopoliser inutilement, pour une seule variable, un espace mémoire qui pourrait etre tellement utile pour autre chose.
La SL fournit une classe réellement géniale pour gérer les chaines de caracteres, et qui prend tous les cas en compte: la std::string (voir, si tu travailles en UTF, une spécialisation de celle-ci avec les wchar_t)
Le code
pose une série de problèmes, ainsi d'ailleurs que l'utilisation de
Code : Sélectionner tout - Visualiser dans une fenêtre à part while(in)
On préféreras bien souvent utiliser tout simplement une boucle du genre de
Code : Sélectionner tout - Visualiser dans une fenêtre à part in.getline()
(voir la FAQ sur le sujet)
Code : Sélectionner tout - Visualiser dans une fenêtre à part while(getline,fichier, string)
Pour t'en convaincre, je voudrais simplement que tu prenne la peine d'essayer de lire le fichier joint avec le code, dérivé du tien que voici:
Enfin, le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int main() { std::ifstream iss("essai.txt"); char str[255]; while(iss) { iss.getline(str,255); std::cout<<str<<std::endl<<std::endl; } if(!iss.eof()) { std::cout<<"COUAC... ou est le reste du fichier???"; } return 0; }est ici inutile: la variable étant détruite deux instructions plus tard (quand la fonction est quittée
Code : Sélectionner tout - Visualiser dans une fenêtre à part in.close()) le fichier sera automatiquement fermé
![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager