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!