Lecture de fichier avec ifstream
Question
J'essaie de lire le fichier: Le fichier est multiligne et, fondamentalement, je dois passer en revue chaque "mot". Word étant quelque chose de non espace.
Un exemple de fichier d'entrée serait:
Exemple de fichier:
test 2d
mot 3.5
entrée
{
test 13.5 12.3
un autre {
test 145.4
}
}
J'ai donc essayé quelque chose comme ça:
ifstream inFile(fajl.c_str(), ifstream::in);
if(!inFile)
{
cout << "Cannot open " << fajl << endl;
exit(0);
}
string curr_str;
char curr_ch;
int curr_int;
float curr_float;
cout << "HERE\n";
inFile >> curr_str;
cout << "Read " << curr_str << endl;
Le problème est que quand il lit une nouvelle ligne, il se bloque. J'ai tout lu avant le test 13.5 mais une fois qu'il atteint cette ligne, il ne fait plus rien. Tout le monde peut me dire ce que je fais mal? Une meilleure suggestion sur la façon de le faire ???
J'ai essentiellement besoin de parcourir fichier et d'aller d'un "mot". (omble blanc) à l'époque. Je
Merci
La solution
Vous ouvrez un fichier 'inFile' mais vous lisez dans 'std :: cin' une raison particulière?
/*
* Open the file.
*/
std::ifstream inFile(fajl.c_str()); // use input file stream don't.
// Then you don't need explicitly specify
// that input flag in second parameter
if (!inFile) // Test for error.
{
std::cerr << "Error opening file:\n";
exit(1);
}
std::string word;
while(inFile >> word) // while reading a word succeeds. Note >> operator with string
{ // Will read 1 space separated word.
std::cout << "Word(" << word << ")\n";
}
Autres conseils
Vous ne savez pas comment " dans l'esprit " de la bibliothèque iostream, c’est possible, mais vous pouvez le faire avec une entrée non formatée. Quelque chose comme:
char tempCharacter;
std::string currentWord;
while (file.get(tempCharacter))
{
if (tempCharacter == '\t' || tempCharacter == '\n' || tempCharacter == '\r' || tempCharacter == ' ')
{
std::cout << "Current Word: " << currentWord << std::endl;
currentWord.clear();
continue;
}
currentWord.push_back(tempCharacter);
}
Est-ce que ça marche?