Domanda

Sto provando a leggere dal file: Il file è multilinea e fondamentalmente ho bisogno di andare su ogni "parola". La parola è qualcosa di non spazio.

Il file di input di esempio sarebbe:

  

File di esempio:

     

test 2d
      parola 3.5
      ingresso
      {
        test 13.5 12.3
        un altro {
         test 145,4
         }
       }

Quindi ho provato qualcosa del genere:

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;

Il problema è quando legge una nuova riga che si blocca. Ho letto tutto prima del test 13.5 ma una volta raggiunta quella linea non fa nulla. Qualcuno può dirmi cosa sto facendo di sbagliato? Qualche suggerimento migliore su come farlo ???

Devo essenzialmente passare attraverso il file e passare a una parola " parola " (carattere non bianco) al momento. I

Grazie

È stato utile?

Soluzione

Apri un file 'inFile' ma stai leggendo da 'std :: cin' qualche motivo particolare?

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

Altri suggerimenti

Non sono sicuro di come " nello spirito " della libreria iostream questo è, ma potresti farlo con input non formattato. Qualcosa del tipo:

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

Funziona?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top