Jump to content

Ler ficheiros .txt e separar strings


elcamone
 Share

Recommended Posts

Boas,

preciso de ler um ficheiro .txt e colocar o conteudo de cada linha num vector, o codigo que ate agora fiz foi:

#include <iostream>

#include <string>

#include <fstream>

using namespace std;

void main(){

string frase[50];

int i=0;

ifstream in("ficheiro_a_ler.txt");

if (!in)

{

cout << "Ficheiro nao encontrado!!";

}

else

{

do

{

getline(in,frase [ i ]);

cout << frase [ i ] << endl;

i++;

}while(in.get() != EOF);

}

cout << endl << endl << endl;

for (int g=0; g <= i; g++)

{

cout << frase[g] << endl;

}

cout << endl;

}

Não sei porque mas (com a excepção da primeira linha) ele "come" o primeiro caracter de cada linha, por exemplo:

o ficheiro "ficheiro_a_ler.txt" tem o seguinte conteudo:

isto nao funciona, mas a ver vamos

espero resolver, isto, hmmm

bla bla bla, ggghhh

ao executar o programa eu vejo:

isto nao funciona, mas a ver vamos

spero resolver, isto, hmmm

la bla bla, ggghhh

ou seja, ele "comeu" o "e" da 2ª linha e o "b" da 3ª linha, o:

while(in.get() != EOF)

esta a "comer" o 1º caracter de cada uma das linhas (não come da 1ª porque uso do/while).

O que estou a fazer de mal?  ?

A minha 2ª duvida é:

como se faz a separação de uma string em c++? Tentei o strtok(), mas so funciona para chars.

Eu preciso de separar atraves das virgulas:

Exemplo (em pseudo-codigo):

...

Se (frase[0].split(",") == "isto nao funciona")

{

      escrever << "ok";

}

...

Agradeço desde ja as vossas ajudas.

Fiquem bem

Link to comment
Share on other sites

Para fazeres a separação de strings entre vírgulas, podes utilizar a função find, cuja assinatura é:

size_t find ( char c, size_t pos = 0 ) const;

Portanto, envia à função o caracter que pretendes encontrar e a posicao inical(int inic = 0) onde começa a pesquisa. A função vai retornar-te a posição onde encontrou a virgula daí que recomendo a declaracao de uma variável inteira pos para guardar o valor.

Para obter o seguinte conteúdo da linha, deve incrementar a variável pos, atribuir pos a inic e voltar a repetir o mesmo procedimento.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.