Ir ao conteúdo
  • Cadastre-se

Manipulação de arquivo .txt em C++


Ir à solução Resolvido por dontpanic,

Posts recomendados

Boa tarde!
 
Estou tentando fazer um programa no Geany em C++ que abra um arquivo em .txt que contem valores e guarde-os para que eu possa fazer cálculos com os mesmos. O arquivo possui 5 colunas: estação meteorológica (número), ano, mês, dia e precipitação (número). Eu vi um exemplo porém é em C. Gostaria de ajuda com isso em C++, pois não consigo entender em C pois é menos claro. Essa é uma pequena parte dos dados que possuem mais de 11 milhões de linhas.
 
      835139        1998           1           1  0.300000012    
      835139        1998           1           2  0.100000001    
      835139        1998           1           3   0.00000000    
      835139        1998           1           4   0.00000000    
      835139        1998           1           5   0.00000000    
      835139        1998           1           6   0.00000000    
      835139        1998           1           7   7.90000010    
 
A parte do algoritmo que eu mais estou em dúvida é essa, que foi escrita em C

for(i=0; i<numero_linhas; i++) {
fscanf(arquivo,"%d %d %d %d %lf\n", &t1, &ano, &mes, &dia, &t2);
}

 

Não consigo entender o por que do %d e o & antes das variáveis. Gostaria de saber também por que algumas variáveis possuem um * antes do nome.

 

Minha dúvida principal é com relação ao fscanf, alguém saberia como eu escrevo essa função nesse caso?

 

Obrigado

Link para o comentário
Compartilhar em outros sites

%d |> chame se string de formatação é um de muitos. Esse transcreve um sequência de char numéricos em um inteiro (int).<br />

& |> e comercial, dar passa o acesso, ou, local da celula de memória para leitura e gravação.<br />

* |> junto a uma variável diz que a mesma é um ponteiro (c type point).

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

Esses símbolos, '%d', '%c', '%lf' são máscaras ou marcadores que vão dizer a função fscanf que tipo de dado capturar do buffer.

 

Pense no seu arquivo como uma sequencia de dados:

"835139        1998           1           1  0.300000012" ---> <numero inteiro> <espaço> <numero inteiro> <espaço> <numero inteiro> <espaço> <numero inteiro> <espaço> <numero fracionário>

 

Então esses símbolos vão dizer ao fscanf o que esperar do stream.

%d equivale a um numero inteiro (int)

 

Então o comando: fscanf(arquivo, "%d", &x)

Vai abrir o buffer do arquivo, vai capturar o primeiro dado na sequencia, interpretar ele como um número inteiro e guardar seu valor na variável 'x'.

O valor de 'x' após o comando vai ser '835139'.

 

Se você tivesse um arquivo com apenas uma linha contendo:

"azul 123 a"

E você quisesse ler o conteúdo dele com a função fscanf, você usaria esse comando:

fscanf (arquivo, "%s %d %c", string, &numero, &letra);

 

O %s equivale a uma string --> "azul"

O %d equivale a um número --> 123

E o %c equivale a uma única letra --> 'a'

 

A função fscanf recebe como argumentos os endereços das variáveis onde ela vai guardar os dados que capturou, por isso você precisa usar o & antes dos nomes das variáveis.

 

Em C++ a lógica é parecida, mas o código é diferente:

Em vez de usar uma variável do tipo FILE e a função fopen() pra abrir seu arquivo, você declara um objeto do tipo fstream e chama o método open do próprio objeto.

Em vez de usar a função fscanf() pra ler dados do arquivo e fprintf pra escrever dados no arquivo, você simplesmente usa os operadores '>>' e '<<' pra entrada e saída do stream.

 

Exemplo:

#include <iostream>#include <fstream>#include <string>using namespace std;int main () {    string s;    int i;    char c;     ifstream arquivo;    arquivo.open ("teste.txt"); // abriu o arquivo 'teste.txt' pra leitura    arquivo >> s >> i >> c; // isso é o equivalente a fscanf(arquivo, "%s %d %c", s, &i, &c);    arquivo.close();     cout << s << i << c << endl;    return 0;}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...