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

luisjteixeira

fstream em c++?

11 mensagens neste tópico

ola bom dia

preciso uma ajuda em c++

preciso ler um ficheiro de texto do tipo.

10 20

0 2 3 0 4 1

0 2 2 0 2 2

na qual  leio a segunda linha e terceira, preciso de juntar e formar uma lista sequencial com os dois elementos pela ordem em que se encontram, sei que tenho que usar a lib. fstream, desde ja agradeço.

obrigado

saudações académicas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres usar ficheiros, suponho que saibas ler do standard input com cin e cout.

Tal como podes ver em http://www.cppreference.com/cppio/all.html  , tem alguns exemplos dos construtores dessa biblioteca (e não só). Se só queres ler o input podes usar

ifstream fin( "data.txt" );

fin >> inteiro1 >> inteiro2;

while ( fin >> i)   // ler ate ao final de ficheiro
{
     fin >> ... ler resto da linha
}
fin.close();

Podes usar o objecto "fin" como se estivesses a ler do teclado com "cin".

PS: Se sabes qual é a biblioteca que deves usar, acho que o melhor é procurar um manual dela. Nos últimos tempos habituei-me a usar os manuais instalados na distribuição de linux da faculdade e o meu rendimento aumentou bastante :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok

ja estou ler um tutorial cplusplus.com/tutorial.

saudações academicas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres usar ficheiros, suponho que saibas ler do standard input com cin e cout.

Tal como podes ver em http://www.cppreference.com/cppio/all.html  , tem alguns exemplos dos construtores dessa biblioteca (e não só). Se só queres ler o input podes usar

ifstream fin( "data.txt" );

fin >> inteiro1 >> inteiro2;

while ( fin >> i)   // ler ate ao final de ficheiro
{
     fin >> ... ler resto da linha
}
fin.close();

Podes usar o objecto "fin" como se estivesses a ler do teclado com "cin".

PS: Se sabes qual é a biblioteca que deves usar, acho que o melhor é procurar um manual dela. Nos últimos tempos habituei-me a usar os manuais instalados na distribuição de linux da faculdade e o meu rendimento aumentou bastante :D

que tal

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, uma forma simples de "tirar" os valores da string é usar o stringstream (a STL é nossa amiga :D)

Imaginando que tinhas lido a linha "0 2 3 0 4 1" (exemplo que deste).

..
#include <sstream>
..
    int i , valores[ 7 ];

    while (! myfile.eof() )
    {
      getline (myfile,line);
      cout << line << endl;
      stringstream s( line );
      for ( i = 0 ; i < 6 ; i++ )
            s >> valores[ i ];
      ...
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres usar ficheiros, suponho que saibas ler do standard input com cin e cout.

Tal como podes ver em http://www.cppreference.com/cppio/all.html  , tem alguns exemplos dos construtores dessa biblioteca (e não só). Se só queres ler o input podes usar

ifstream fin( "data.txt" );

fin >> inteiro1 >> inteiro2;

while ( fin >> i)   // ler ate ao final de ficheiro
{
     fin >> ... ler resto da linha
}
fin.close();

Podes usar o objecto "fin" como se estivesses a ler do teclado com "cin".

PS: Se sabes qual é a biblioteca que deves usar, acho que o melhor é procurar um manual dela. Nos últimos tempos habituei-me a usar os manuais instalados na distribuição de linux da faculdade e o meu rendimento aumentou bastante :)

que tal

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}

como leio so a segunda linha?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os ficheiros de texto são sequênciais, isto significa que não podes ler directamente a linha N.

Por isso, para leres a 2ª linha tens de ler a primeira linha (e ignorar o que lês) e ler outra vez do ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os ficheiros de texto são sequênciais, isto significa que não podes ler directamente a linha N.

Por isso, para leres a 2ª linha tens de ler a primeira linha (e ignorar o que lês) e ler outra vez do ficheiro.

// reading a text file
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main () {

  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
      getline (myfile,line);
      cout << line << endl; // onde esta o end1 colocar  " " para ser sequencial sem linhas
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 
  system ("pause");
  return 0;
}

este é o meu codigo , como manipulo a string atraves do cin?

pois pretendo so trabalhar com a 2 e 3 linha para colocar num vector.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

este é o meu codigo , como manipulo a string atraves do cin?

pois pretendo so trabalhar com a 2 e 3 linha para colocar num vector.

Não é através do cin, podes usar uma stringstream (cuja sintaxe é igual ao cin).

Para pegares na 2ª e 3ª linha fazes 3 leituras, não precisas do ciclo while.

if (myfile.is_open())
{
    getline( myfile , line2 );   // ler a 1ª linha: vai ser ignorada
    getline( myfile , line2 );   // aqui porque o conteudo da variavel fica com a 2ª linha
    getline( myfile , line3 );
    ...
     
}

Para retirares os números das strings, podes fazer como disse num post anterior

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

este é o meu codigo , como manipulo a string atraves do cin?

pois pretendo so trabalhar com a 2 e 3 linha para colocar num vector.

Não é através do cin, podes usar uma stringstream (cuja sintaxe é igual ao cin).

Para pegares na 2ª e 3ª linha fazes 3 leituras, não precisas do ciclo while.

if (myfile.is_open())
{
    getline( myfile , line2 );   // ler a 1ª linha: vai ser ignorada
    getline( myfile , line2 );   // aqui porque o conteudo da variavel fica com a 2ª linha
    getline( myfile , line3 );
    ...
     
}

Para retirares os números das strings, podes fazer como disse num post anterior

boas o meu código esta dar realizei testes e ta dar....

e é do tipo

.....
  if (myfile.is_open())
  {
    /* le-se a 1ª linha */
    getline( myfile , line1 );  
    cout <<"linha 1 e'   "<< line1 << endl; 
    
    /* transforma 1ª linha num vector que contem o numero de colunas(C) e numero de linhas (L) */
    stringstream r( line1 );
    int tamanho_tabuleiro[2];
     while( a<2 )
            {r >> tamanho_tabuleiro[a];
            a++;}
    //verifica o vector tamanho_tabuleiro
    cout<<"numero de linhas e'  "<<tamanho_tabuleiro[0]<<endl;
    cout<<"numero de colunas e' "<<tamanho_tabuleiro[1]<<endl;
    cout<<"teste tamanho_tabuleiro[2]       =   "<<tamanho_tabuleiro[2]<<endl;
    cout<<endl<<endl; 
    L=tamanho_tabuleiro[0]; 
    C=tamanho_tabuleiro[1];
    
int v_diam[L], v_quant[L], v_destino[L];
     

 // le-se a  2ª linha
     cout<< L<<endl;
     cout<< C<<endl;
        getline(myfile,line2); 
    cout <<"linha 2 e'   "<< line2 << endl; 
       //transforma a 2ª linha num vector designado v_diam que guarda os diametros das peças
   stringstream t( line2 );    
       while( b < L  )
            {t >> v_diam[b];
            b++;}
....

saudações académicas

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