Frage

Ich versuche, aus einer Datei zu lesen: Die Datei ist mehrzeilige und im Grunde muss ich über jedes „Wort“ gehen. Wort ist alles nicht Raum.

Beispieleingabedatei wäre:

  

Beispieldatei:

     

Test 2d
      Wort 3.5
      Eingang
      {
        Test 13.5 12.3
        eine andere {
         Testen 145,4
         }
       }

So habe ich versucht, so etwas wie folgt aus:

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;

Das Problem ist, wenn es neue Zeile liest es hängt nur. Ich las alles, was vor dem Test 13.5 aber sobald es diese Zeile erreicht tut es nichts zu tun. Wer kann mir sagen, was ich falsch mache? Jede bessere Vorschläge, wie dieses ??? tun

Ich muss im Wesentlichen durch Datei gehen und ein „Wort“ (nicht weiß char) zu der Zeit gehen. I

Danke

War es hilfreich?

Lösung

Sie öffnen eine Datei ‚inFile‘, sondern von der ‚std :: cin‘ einen besonderen Grund liest?

/*
 * 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";
}

Andere Tipps

Nicht sicher, wie „im Geist“ der iostream-Bibliothek das ist, aber man könnte es mit unformatierter Eingabe zu tun. So etwas wie:

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);
}

funktioniert das?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top