Você está aqui: C ::: Dicas & Truques ::: Arquivos e Diretórios

Como testar a existência de uma palavra ou frase em um arquivo

Quantidade 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 C

Quantidade 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 C

Quantidade 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);
buffer é um ponteiro para o vetor que receberá o conteúdo lido. num é o número de caracteres que será lido (veja que o conteúdo será lido até alcançar este número, ou um caractere de quebra de linha for encontrado, ou o marcador de fim de arquivo EOF for encontrado, o que vier primeiro). file é um ponteiro para o arquivo que foi aberto.

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 C

Quantidade 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

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware 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 funcionalidadesControle 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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 54 usuários muito felizes estudando em nosso site.