Projeto: Scanner de PDF

Leitura de arquivos .txt e associação com .pdf

Equipe: Ramom Souza, Eduardo Molica, Antonio Ferreira, Yuri Bom

📌 Objetivo Geral

  • Receber o caminho de uma pasta com arquivos
  • Buscar por uma palavra-chave nos arquivos .txt
  • Exibir os PDFs correspondentes ordenados por quantidade de ocorrências

🔧 Bibliotecas utilizadas

  • stdio.h → Entrada e saída de dados
  • stdlib.h → Funções como system()
  • string.h → Manipulação de strings
  • unistd.h → Função sleep() (pausa)

🏗️ Estrutura Geral

  • Ponteiros de arquivo: FILE *path, *file, *file2, *file3
  • Arrays: caminho[100], comando[100], palavra[100]
  • Vetores de resultados: nomesArquivos[100][100], ocorrencias[100]

📂 Obtenção do Caminho

  • Usuário digita o caminho da pasta
  • Remove o \n final da string
  • Gera o comando dir para listar arquivos .txt
  • Salva o comando no arquivo path.txt

📄 Execução dos Comandos

  • Lê o comando de path.txt
  • Executa com system()
  • Resultado: Criação de listaTXT.txt
  • Repete o processo para os arquivos .pdf

🗑️ Limpeza de Arquivos Temporários

O arquivo path.txt é deletado após uso para evitar acúmulo de arquivos temporários.

📏 Contagem de Arquivos TXT

  • Lê linha por linha o listaTXT.txt
  • Conta quantos arquivos .txt foram encontrados
  • Armazena o número em linhas

🔎 Entrada da Palavra-chave

  • Usuário insere a palavra-chave
  • Validação: impede busca com string vazia
  • Remove \n do fgets()

🔍 Lógica de Busca nos Arquivos

  • Abre cada .txt da lista
  • Lê linha por linha
  • Busca a palavra caractere por caractere
  • Conta o número de ocorrências por arquivo
  • Associa cada resultado ao PDF correspondente

🔢 Algoritmo de Busca

  • Implementação de uma busca simples de substring
  • Compara a palavra com cada trecho da linha
  • Incrementa um contador sempre que encontra
  • Complexidade: O(n*m) para cada arquivo

🗃️ Organização dos Resultados

Dois vetores principais:

  • nomesArquivos[][] → Nome dos PDFs
  • ocorrencias[] → Número de vezes que a palavra apareceu

🔄 Ordenação (Selection Sort)

  • Compara cada posição com todas as seguintes
  • Ordena os resultados por número de ocorrências (crescente)
  • Complexidade: O(n²)

⏳ Animação de Espera

Usa sleep(1) para criar efeito de carregamento:


printf("Analisando arquivos");
sleep(1);
printf(".");
sleep(1);
printf(".");
sleep(1);
printf(".");
        

📈 Exibição dos Resultados

  • Mostra cada arquivo PDF e o número de ocorrências
  • Apresenta um resumo: Quantos arquivos tiveram ao menos uma ocorrência

🧹 Limpeza Final

Deleta os arquivos temporários listaTXT.txt e listaPDF.txt:


system("del /f listaTXT.txt");
system("del /f listaPDF.txt");
        

⚠️ Pontos Importantes

  • Funciona apenas no Windows (uso de dir e del)
  • Assume que a ordem dos .txt corresponde à dos .pdf
  • Limitação de tamanho de arrays (máximo 100 arquivos)
  • Busca é case-sensitive (diferencia maiúsculas de minúsculas)

🛠️ Possíveis Melhorias

  • Buscar sem diferenciar maiúsculas/minúsculas
  • Usar estruturas de dados dinâmicas
  • Permitir número ilimitado de arquivos
  • Portabilidade para Linux/Mac
  • Melhor tratamento de erros

✅ Conclusão

Nosso scanner de PDF em C cumpre seu objetivo de forma simples e eficiente.

Trabalhamos com leitura de arquivos, manipulação de strings, execução de comandos externos e ordenação.

Obrigado!