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

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top