Você está aqui: C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como testar a existência de uma palavra ou frase em um arquivoQuantidade de visualizações: 10378 vezes |
Em algumas situações precisamos pesquisar a ocorrência de uma palavra ou frase em um arquivo. Nesta dica eu mostro como isso pode ser feito. A idéia é varrer o arquivo caractere por caractere usando a função fgetc() e, quando encontrado o caractere que se iguala ao primeiro caractere da string sendo pesquisada, a comparação caractere por caractere se inicia. Eis o código completo e comentado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *arquivo = fopen("c:\\testes.txt", "r"); int caractere; // caractere a ser lido // string a ser pesquisada char pesquisa[] = "Java"; // posicao de início da pesquisa int pos = 0; // status da pesquisa int encontrei = 0; // testa se o arquivo foi aberto com sucesso if(arquivo != NULL){ // vamos usar um laço para ler o conteúdo do arquivo // um caractere de cada vez while((caractere = fgetc(arquivo)) != EOF){ // vamos verificar se o caractere atual se iguala ao // primeiro caractere da string a ser pesquisada if((caractere == pesquisa[0]) && (!encontrei)){ encontrei = 1; // podemos continuar a pesquisa a partir daqui pos = 0; } if(encontrei){ if(caractere == pesquisa[pos]){ encontrei = 1; // continua a pesquisa pos++; // incrementa a posição de busca if(pos == strlen(pesquisa)) break; } else{ encontrei = 0; } } } fclose(arquivo); // libera o ponteiro para o arquivo } else printf("Nao foi possivel abrir o arquivo."); if(encontrei){ printf("A string pesquisada existe no arquivo"); } else{ printf("A string pesquisada NAO existe no arquivo"); } printf("\n\n"); system("PAUSE"); return 0; } |
Link para compartilhar na Internet ou com seus amigos: |
C ::: Dicas & Truques ::: Struct (Estruturas, Registros) |
Como alocar memória para instâncias de uma estrutura (struct) e acessá-las usando ponteiros em CQuantidade de visualizações: 11318 vezes |
Esta dica mostra como declarar uma estrutura (struct), alocar duas instâncias desta e acessá-las usando ponteiros. Considere a seguinte struct: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // define a estrutura Livro struct Livro{ char titulo[80]; int codigo; int paginas; }; Note que agora a variável titulo foi declarada como uma matriz de caracteres de 80 posições. Mais adiante você entenderá o propósito de tal abordagem. Veja agora como alocamos memória para duas instâncias desta estrutura: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // cria dois ponteiros para duas instâncias (recém-alocadas) // de Livro Livro *a = (struct Livro*)malloc(sizeof(struct Livro)); Livro *b = (struct Livro*)malloc(sizeof(struct Livro)); A partir deste ponto as variáveis a e b são ponteiros para as duas instâncias recém alocadas. Observe que, quando usamos ponteiros para estruturas, seus membros são acessados usando-se a notação -> em vez do ponto. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- a->codigo = 342; a->paginas = 230; Para definir o valor para o membro titulo é preciso lançar mão da função strcpy(). Isso é feito porque estamos lidando com ponteiros, e cada instância de Livro possui sua área de memória a partir da qual a posição inicial da cadeia de caracteres que receberá o título do livro já foi inicializada. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- strcpy(a->titulo, "Programando em Java"); Observe agora o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> // define a estrutura Livro struct Livro{ char titulo[80]; int codigo; int paginas; }; int main(int argc, char *argv[]){ // cria dois ponteiros para duas instâncias (recém-alocadas) // de Livro Livro *a = (struct Livro*)malloc(sizeof(struct Livro)); Livro *b = (struct Livro*)malloc(sizeof(struct Livro)); // preenche os dados do primeiro Livro // Estamos usando ponteiros agora. Para definir o título // do livro é preciso usar a função strcpy, já que estamos // usando uma cadeia de caracteres strcpy(a->titulo, "Programando em Java"); a->codigo = 342; a->paginas = 230; // preenche os dados do segundo Livro strcpy(b->titulo, "JavaScript - O Guia Prático"); b->codigo = 675; b->paginas = 930; // exibe os dados do primeiro livro printf("Primeiro Livro\nTitulo: %s\nCodigo: %d\nPaginas: %d\n", a->titulo, a->codigo, a->paginas); // exibe os dados do segundo livro printf("\nSegundo Livro\nTitulo: %s\nCodigo: %d\nPaginas: %d\n", b->titulo, b->codigo, b->paginas); puts("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como ler o conteúdo de um arquivo uma linha de cada vez usando a função fgets() da linguagem CQuantidade de visualizações: 28682 vezes |
A função fgets(), disponível no header cstdio ou stdio.h, é usada para ler caracteres de um arquivo e armazená-los em um vetor de caracteres. Esta função recebe três argumentos. Veja:char *fgets(char *buffer, int num, FILE *file); No exemplo abaixo usamos um laço while() para ler o conteúdo até que o final de arquivo EOF seja encontrado. Desta forma, como sabemos que cada linha no arquivo termina com um marcador de fim de linha, fica fácil ler cada linha. É claro que se a linha sendo lida for maior que o tamanho do buffer, o efeito não será conseguido. Observe ainda que cada linha lida contém o caractere de fim de linha anexado a ela: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> const int TAM_BUFFER = 255; // quantidade de caracteres // a serem lidos no buffer de cada vez int main(int argc, char *argv[]) { FILE *arquivo = fopen("c:\\testes.txt", "r"); char buffer[TAM_BUFFER]; // testa se o arquivo foi aberto com sucesso if(arquivo != NULL){ // vamos usar um laço para ler o conteúdo do arquivo // e armazenar no buffer while(fgets(buffer, TAM_BUFFER, arquivo)){ printf("%s\n", buffer); } fclose(arquivo); // libera o ponteiro para o arquivo } else{ printf("Nao foi possivel abrir o arquivo."); } printf("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como contar as linhas de um arquivo usando a função fgetc() da linguagem CQuantidade de visualizações: 20740 vezes |
Em algumas situações precisamos obter a quantidade de linhas em um arquivo em C. Nesta dica eu mostro como isso pode ser feito usando-se a função fgetc(), no header stdio.h. Note que aqui estamos assumindo que o arquivo texto não possui uma quebra de linha após a última linha de texto. Veja o código comentado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // nome e local do arquivo que será aberto para // obtermos a quantidade de linhas FILE *arquivo = fopen("c:\\testes.txt", "r"); int caractere, existe_linhas = 0; int quant_linhas = 0; while((caractere = fgetc(arquivo)) != EOF){ existe_linhas = 1; // há conteúdo no arquivo if(caractere == '\n'){ // é uma quebra de linha? // vamos incrementar a quantidade de linhas quant_linhas++; } } // se não houver uma quebra de linha na última linha // a contagem será sempre um a menos. Assim, é melhor // incrementar quant_linhas mais uma vez if(existe_linhas) quant_linhas++; // vamos exibir o resultado printf("O arquivo possui %d linhas.", quant_linhas); printf("\n\n"); system("PAUSE"); return 0; } |
Vamos testar seus conhecimentos em Fundações |
Sondagem à Percussão (SPT) e Rotativa (RQD) Qual a densidade relativa calculada pela formulação empírica de Skempton, considerando que o valor de N corrigido foi de 20 a uma profundidade de 2m em um solo cujo peso específico é de 20 kN/m3? A) 0,82. B) 0,78. C) 0,87. D) 0,72. E) 0,61. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Ética Empresarial e Profissional: Noções Gerais Para Cortella (2007), a ética é um grupo de princípios e valores que usamos para optar entre três situações significativas da nossa existência. Elas estão presentes em nosso cotidiano e, por essa razão, é necessário estar preparado para efetuar a escolha da melhor forma possível. Assinale a alternativa que contém as três grandes situações que nos afligem e requerem decisão. A) Quero; devo; é verdadeiro. B) É falso; posso; quero. C) Quero; devo; posso. D) Posso; moral; certeza. E) Posso; devo; religiosidade. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Responsabilidade civil no código de defesa do consumidor O fornecedor e o prestador de serviço estarão livres do dever de indenizar caso não haja dano reparável e ficar comprovado que: A) a culpa foi exclusiva do consumidor ou de terceiro. B) a culpa foi do fornecedor. C) ninguém teve culpa. D) todos tiveram culpa. E) não importa quem teve culpa. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Python |
Qual o resultado da execução do seguinte código Python?valor = 56.21 print("Valor: %.5d" % valor) A) Valor: 00056 B) Valor: 21 C) Valor: 00056.21 D) Valor: 56 E) Valor: 6.2100 Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Python |
Qual o resultado da execução do seguinte código Python?frase = "Gosto Muito de Python" frase = frase.swapcase() print(frase) A) gOSTO mUITO DE pYTHON B) Gosto muito de python C) Gosto Muito De Python D) PYTHON DE MUITO GOSTO E) gosto MUITO de PYTHON Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |