Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
david nilo

C++ Ler arquivo TXT em C

Recommended Posts

boa tarde galera do Clube do Hardware, sou novo aqui então me perdoem se eu fala algo errado.

bom vamos ao meu problema, tenho q fazer um código em linguagem c que leia um arquivo .txt, ate aqui tudo bem porém tenho q mostra o texto na tela e depois consulta uma linha especifica por um nome por exemplo: tem uma lista de produdos e seus repectivos codigos. nesse meu programa qro digitar o nome do produto e aparecer todas informações q contem nessa lista.txt..

void suspencao(void){
int cod;
    char url[]="lista.txt";
    char ch;
    FILE *arq;
    
    arq = fopen(url, "r");
        while( (ch=fgetc(arq))!= EOF )
        putchar(ch);        
    fclose(arq);
    printf("\n\ndigite codigo da peca\n");
    scanf("%d", &cod);
}

 

coloquei a lista num procedimento,mas acho q vou colocar depois numa struct. primeiro qro resolver esse probleminha de manipula o arquivo, agradeço desde já pela ajuda..

Editado por DiF
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@david nilo Para encontrar determinado produto, seja, por nome, tipo, etc..., use fscanf, porém você precisa organiza-los quando for salvar, de forma que seja possível usar fscanf.

Portanto, na hora da leitura, basta usar fscanf e armazenar os dados em cada variável, de acordo com a estrutura de salvamento, ai utilize strncmp para comparar as variáveis, e assim você já terá as outras informações, obtidas pelo fscanf.

Editado por TYSQUARE89
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • ainda n resolvi o meu problema, fiz uma pesquisa e consegui desenvolver esse codigo.

    mas ele não sai do primeiro if..

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct produto{
        char peca[30];
        int codigo;
    }cad;

    int main(){
        FILE* arq;
        char pesquisa[100];
        int pos = 0, regnum = 0;
        char opc;
        
        if ((arq = fopen("lista.txt", "r+b")) == NULL);{
            printf(" houve um erro ao ler o arquivo!\n");
            system("pause");
            exit(1);
        }
        printf("Lista de produtos!\n\n");
        printf("Digite sua pesquisa:\n");
        gets(pesquisa);
        
        while(!feof(arq)){
            if (fread(&cad, sizeof(struct produto), 1, arq)==1){
                if(strcmp(cad.peca, pesquisa)== 0 || cad.codigo == atoi(pesquisa)){
                    printf("\n\tpeca: %s\n\tcodigo: %d\n\n", cad.peca, cad.codigo);
                    regnum = pos+1;
                    break;
                }
            }
            pos++;
        }
        
        if (regnum ==0){
            printf("Desculpe! produto nao localizado");
        } else{
            printf("Deseja altera o registro?(s/n) ");
            scanf("%s", &opc);
            getchar();
            if (opc == 's'){
                    printf("atualizar produto: \n\n");
                    printf("\tpeca: ");
                    gets(cad.peca);
                    printf("\tcodigo: ");
                    scanf("%d", &cad.codigo);
                    printf("\n\n");
                    getchar();
                    
                    fseek(arq, sizeof(struct produto)*(regnum-1), SEEK_SET);
                    fwrite(&cad, sizeof(struct produto), 1, arq);
                    printf("registro alterado com susseco! \n\n");
            }
            
        }
        fclose(arq);
        system("pause");
        return 0;    
    }
     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @david nilo    seria melhor para trabalhar com os dados se você pegar o que está na lista e colocar em um struct , para isso precisa ver como os dados estão organizados na lista , ela poderia ser assim ;

    produto    preço_compra   preço_venda   codigo      data
    arroz          8,00           10,00       500     15/10/17     
    feijao         3,00           4,00        501     12/10/17
    carne          10,00          15,00       502     08/10/17
    leite          1,00           2,00        503     09/10/17
    outro          2,00           4,00        504     20/10/17

    nessa lista os dados precisam estar separados por pelo menos um espaço, e então você coloca um struct  assim :

    struct arquivo{
        char produto     [20];
        char preco_compra[30];
        char preco_venda [20];
        char codigo      [20];
        char data        [20];
      };
      struct arquivo dados[100000];

    e coloca no struct assim :

    fp =   fopen("c:/dados de consulta.txt","r");
    if(fp==NULL){MessageBox(0,"erro no arquivo","",0);}
    while( fscanf(fp,"%s",&dados[j].produto  ) != EOF && fscanf(fp,"%s",&dados[j].preco_compra  ) != EOF
        && fscanf(fp,"%s",&dados[j].preco_venda) != EOF && fscanf(fp,"%s",&dados[j].codigo) != EOF
        && fscanf(fp,"%s",&dados[j].data ) != EOF){
        j++;
    }
    fclose(fp);

    aí então você pesquisa no struct normalmente e faz as modificações que quiser e depois quando terminar de fazer tudo você salva esse struct novamente no arquivo, seguindo neste mesmo formato .

    Editado por devair1010
    • Amei 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • bele meu amigo vou tenta aqui

    adicionado 11 minutos depois

    assim acho que fiz besteira porque assim sou novo em linguagem c, não consegui colocar essas informações que você passo,

    add essa estruct  e substitui o 1 if e o while. e ficou pior.

    você poderia me mostra como fazer essas alterações? 

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @david nilo    aqui seu código com algumas modificações :

    #include<stdio.h>
    #include<locale.h>
    #include<stdlib.h>
    #include<string.h>
    struct produto{
        char peca[30];
        int codigo;
    }cad[100];
    int main(){
        setlocale(LC_ALL,"");
        FILE* arq;
        char pesquisa[100];
        int pos = 0,j,i,regnum = 0;
        char opc;
        arq=fopen("lista2.txt","r");
        if(arq==NULL){
            printf(" houve um erro ao ler o arquivo!\n");
            system("pause");
            exit(1);
        }
        j=1;
        fscanf(arq,"%s",&cad[0].peca);fscanf(arq,"%s",&cad[0].peca);
        while( fscanf(arq,"%s",&cad[j].peca  ) != EOF && fscanf(arq,"%d",&cad[j].codigo  ) != EOF){
            j++;
        }
        fclose(arq);
        printf("Lista de produtos!\n\n");
        printf("Digite sua pesquisa:\n");
        gets(pesquisa);
        for(i=1;i<j;i++){
            if(strcmp(cad[i].peca,pesquisa)==0 || cad[i].codigo == atoi(pesquisa)){
                printf("\n\tpeça: %s\n\tcódigo %d\n\n",cad[i].peca,cad[i].codigo);
                regnum = pos+1;
                break;
            }
        }
        if (regnum ==0){
            printf("Desculpe! produto nao localizado\n");
        } else{
            printf("Deseja altera o registro?(S/N) ");
            scanf("%c", &opc);
            getchar();
            if (opc == 's'){
                    printf("atualizar produto: \n\n");
                    printf("\tpeca: ");
                    gets(cad[i].peca);
                    printf("\tcodigo: ");
                    scanf("%d", &cad[i].codigo);
                    printf("\n\n");
                    getchar();
    
                    remove("lista2.txt");
                    arq=fopen("lista2.txt","w");
                    fprintf(arq,"%s","produto");
                    fprintf(arq,"%s","  ");
                    fprintf(arq,"%s\n","codigo");
                    for(i=1;i<j;i++){
                        fprintf(arq,"%s",cad[i].peca);
                        fprintf(arq,"%s\t"," ");
                        fprintf(arq,"%d",cad[i].codigo);
                        fprintf(arq,"%s\n"," ");
                    }
                    fclose(arq);
                    /*fseek(arq, sizeof(struct produto)*(regnum-1), SEEK_SET);
                    fwrite(&cad, sizeof(struct produto), 1, arq);*/
                    printf("registro alterado com susseco! \n\n");
            }
    
        }
        /*fclose(arq);*/
        system("pause");
        return 0;
    }

    não entendi essa parte de fseek que você colocou para alterar o arquivo, ela parece não ter funcionado, creio que no lugar desse  fseek fwrite você precisaria colocar assim :

    remove("lista2.txt");
    arq=fopen("lista2.txt","w");
    fprintf(arq,"%s","produto");
    fprintf(arq,"%s","  ");
    fprintf(arq,"%s\n","codigo");
    for(i=1;i<j;i++){
        fprintf(arq,"%s",cad[i].peca);
        fprintf(arq,"%s\t"," ");
        fprintf(arq,"%d",cad[i].codigo);
        fprintf(arq,"%s\n"," ");
    }
    fclose(arq);

     

    Editado por devair1010

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • valeu meu amigo, muito obrigado devair valeu mesmo, você me ajudo i muito

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×