Pergunta

Eu estou tentando ler a partir do arquivo: O arquivo é de várias linhas e, basicamente, eu preciso passar por cima de cada "palavra". Palavra sendo não espaço qualquer coisa.

arquivo de entrada de amostra seria:

arquivo de amostra:

teste 2d
palavra 3,5
input
{
teste 13,5 12,3
outra {
testando 145,4
}
}

Então, eu tentei algo como isto:

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;

O problema é quando ele lê nova linha ele simplesmente trava. Eu li tudo antes do teste 13,5 mas uma vez que ele atinge essa linha ele não fazer nada. Alguém pode me dizer o que estou fazendo de errado? Qualquer melhor sugestão sobre como fazer isso ???

I essencialmente precisa passar por arquivo e siga por uma "palavra" (char não branco) na época. I

Graças

Foi útil?

Solução

Você abre um arquivo 'INFILE', mas está lendo a partir do 'std :: cin' qualquer razão particular?

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

Outras dicas

Não sei como "no espírito" da biblioteca iostream este é, mas você poderia fazê-lo com a entrada não formatado. Algo como:

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

é que isso funciona?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top