• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

elcamone

Ler ficheiros .txt e separar strings

3 mensagens neste tópico

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?  :hmm:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

for ( i=0; i<50; i++)

  {

      cout << frase (i)<< endl;

  }

  cout << endl;

}

experimenta assim :) [/i]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora