Ir ao conteúdo
  • Cadastre-se

Leitura de Arquivos em C


FernandoAF

Posts recomendados

Bom dia pessoal,


 


Estou trabalhando com um arquivo e dele eu preciso retirar algumas informações. O formato do arquivo é o abaixo:


 


 


-----------------------------------------------------------------


NOME DO ARQUIVO: TESTE REDE ELÉTRICA

PROPRIETARIO: XXX

ENDEREÇO:XXX

CIDADE: XXX

 

SITUAÇÃO

(P1     P2    VAL1    VAL2

(----------------------------------------------------------------------------------------)

    1      2       320     1610

----------------------------------------------------------------

 

As informações que eu preciso retirar estão em negrito.

Eu já consigo abrir o arquivo, salvar algumas informações de outros arquivos, mas neste eu preciso que o meu programa faça a leitura somente dos dados em negrito. Porém, eu preciso encontrar a palavra SITUAÇÃO e pular duas linhas para que então o programa faça a leitura dos dados em negrito.

 

Eu tentei utilizar os comandos como o fgetpos e outros e não conseguir fazer com que o meu programa comece a ler daquele ponto.

 

Espero ter sido claro na minha dúvida.

Obrigado

Link para o comentário
Compartilhar em outros sites

voce deve explicar melhor o seu problema amigo, visto que o arquivo texto nao deve ser um texto puro, pois esse nao carrega informacao de negrito etc. Se fosse possivel transformar esse aquivo em html filtrado seria muito fácil utilizar um Parser para conseguir os dados em negrito, pode tambem fazer teu proprio Parser simples para encontrar essas informações.

 

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

Olá, na realidade eu preciso ler um arquivo de um software de sistemas de transmissão de energia elétrica. Este software gera este tipo de arquivo acima e eu preciso ler este arquivo através do programa que estou tentando fazer e inserir os dados retirados deste arquivo em outro programa de simulação. O arquivo que preciso ler não apresenta as letras em negrito, coloquei elas somente ficar mais fácil a indicação.

O objetivo do meu trabalho é pegar um arquivo muito extenso e filtrar somente os dados que preciso. Neste caso, preciso encontrar a palavra SITUAÇÃO e dela "pular" duas linhas e assim conseguir as informações que preciso que são as características P1 e P2.

 

Eu não trabalhei com Parser ainda e não sabia desta ferramenta. Se puderes dar algumas dicas, serão bem-vindas.

 

Espero ter sido mais claro. Grato

Link para o comentário
Compartilhar em outros sites

Bom se o arquivo nao tem formatacao o uso de parser fica impossivel, mas  voce pode filtrar os dados que voce quer a partir de uma expressao regular. Os dados estão sempre nesse formato ( quatro numero seguidos ) ? Sao sempre numeros ? Se nao quiser usar expressao regular voce pode ler o arquivo linha por linha ate encontrar a palavra SITUACAO depois ler mais duas linhas e comecar a salvar nao parece ter segredo.

Link para o comentário
Compartilhar em outros sites

É exatamente esta a minha necessidade. Os dados estão sempre neste formato e em algumas situações se apresentam como letras e números, mas não é sempre. A minha dificuldade, em função do meu pouco nível de contato com a linguagem em C (tive só no primeiro semestre da faculdade e aprendi quase tudo o que sei pesquisando e lendo), é conseguir fazer o programa em si e quais função usar. Li sobre expressões regulares e não consegui montar um programa que leia a palavra SITUACAO  e PULE duas linhas e comece a gravar os dados. Se puder ajudar, serei muito grato.

Link para o comentário
Compartilhar em outros sites

Posso te ajudar sim, mas não quero somente fazer o programa pra você. Posso ajuda-lo a entender como fazer etc. Primeiro pra encontrar a palavra SITUAÇÃO não é preciso um regex porque é uma busca de substring e não de um padrão, já seus dados parecem ser um padrão. Você precisa compreender esse padrão, saber as possíveis variações, eles sempre aparecem em grupos de 4 ? sempre em número e/ou letras ? caracteres especiais ? A melhor maneira de fazer isso é procurar a origem dos dados e saber o que pode ser esses dados.

Espero respostas e dai começamos a esboçar o programa.

Link para o comentário
Compartilhar em outros sites

Se o cabeçário de seu arquivo segue este padrão, você não precisa pegar pela palavra situação e sim pela linha em que ela está.

Por exemplo se situação esta na linha 7, basta capturar os dados da linha 9 com o código:

char dados1[100];char dados2[100];char dados3[100];char dados4[100];FILE* f = fopen("arquivo.txt", "r");fscanf(f, "%s %s %s %s", &dados1, &dados2, &dados3, &dados4);fclose(f);

ou algo parecido com isso a cada linha de dados do arquivo.

Tente identificar padrões no arquivo para que possa usar a seu favor.

Link para o comentário
Compartilhar em outros sites

Bom dia, o arquivo que tenho que ler pode ter algumas variações, mas o padrão é sempre o mesmo.

O modelo de arquivo que postei no primeiro post não é exatamente o que eu preciso ler, eu reescrevi ele de forma simplificada para ficar mais fácil de entender o meu objetivo, pois o arquivo que preciso ler é muito poluído e para quem não trabalha na área de sistemas elétricos ele fica muito difícil de entender.

Eu postei o formato do arquivo de saída em anexo para ficar mais fácil o entendimento.

 

Andei trabalhando um pouco mais em cima do meu objetivo de trabalho e não é necessário encontrar a palavra DCIR, e sim a palavra EQUIV, pois são nas linhas que estão a palavra EQUIV é onde se encontram os dados que preciso ler.

 

Como pode se ver no arquivo, ele apresenta um formato padrão de saída de dados. O número de linhas depende do tamanho do sistema elétrico que vou estar analisando, logo o bloco DCIR (DADOS DE CIRCUITO), por exemplo, nem sempre vai ter o mesmo número de linhas. Ele começa com a palavra DCIR e termina com os números 99999.

Este arquivo de saída apresenta abaixo da palavra DCIR um tipo de cabeçalho onde mostra os campos para cada dado, assim facilita a identificação e delimitação dos espaços para ler cada dado.
 
Eu editei o arquivo em anexo e deixei somente os dados entre as linhas 17 e 24 para saber se eu conseguia abrir o arquivo e armazenar os dados em vetores ( para saber se o começo do meu trabalho estava certo).
O programa que eu fiz lê os dados BF e BT, só que quando vou ler o dado NC eu preciso armazenar somente dois espaços do arquivo (no caso do arquivo em anexo seria o _1 (espaço em branco e o número 1)) e meu programa começa a dar erro. 
 
Posto aqui o programa que fiz para visualização:
 
//define bibliotecas#include <stdio.h>#include <ctype.h>#include <conio.h>#include <string.h>#include <stdlib.h>int main(void){//declaracao das variaveis com tipo CHAR    char palavra[]="EQUIV";    char nome[20];    char tipo[4];        //declaracao variaveis inteiras    int BARRADE[10000],BARRAPARA[10000], NOMECIRC[10000];int i=0,j=0;    //realiza a abertura do arquivoFILE *fp;fp=fopen("anafasida.dat","r");//condição de teste para ver se tem alguma coisa no arquivo    if(fp == NULL)printf("Erro, nao foi possivel abrir o arquivo\n");//imprime mensagem de erroelse//escaneia o arquivo FP e armazena os %X no dado &Xwhile ((fscanf(fp,"%d %d %d\n", &BARRADE[i], &BARRAPARA[i], &tipo[i]))!=EOF )//le os dados das barras do arquivo        {                 printf("%d = barrade  %d =barrapara   %d  = nomecirc  \n", BARRADE[i], BARRAPARA[i], tipo[i]);//imprime na tela os dados armazenadosi++;    //printf("VALOR DE I = %d\n", i);    }          fclose(fp);//fecha o arquivo    //imprime na tela para verificar o armazenamento    printf("\n\n");    for (j=0;j<5;j++){printf("%d = barrade  %d =barrapara \n", BARRADE[j], BARRAPARA[j]);    }    printf("\n\n");    system("pause");    return 0;}
 
 
 
 
Espero ter sido mais claro agora. Abraço

post-714811-0-76287800-1393513810_thumb.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!