Escolar Documentos
Profissional Documentos
Cultura Documentos
Para fazer pesquisas em arquivos texto em C você deverá fazer um LOOP lendo todo o
arquivo e checando caracter por caracter para encontrar a STRING que você está
pesquisando.
Exemplo:
fclose(f);
Existe um HEADER para C com funções para manipulação de string, além do string.h,
você pode encontrá-lo aqui:
https://gist.github.com/raphaelnapi/ed0c29e049ee6dd0d36d687b77b9ee0a
Com esse header no seu projeto você pode utilizar a função instr() para pesquisar
uma string dentro de outra. Ele retornará a posição do primeiro caracter da String
pesquisada ou -1 caso não a encontre.
Exemplo:
Note que você deverá diferenciar minusculas de maiusculas. Para isso é interessante
fazer com que todos os caracteres da STRING a pesquisar e da STRING pesquisada
sejam minusculas antes de realizar a pesquisa. Com esse HEADER é possível fazer
isso com a função lower().
Compartilhar
Melhore esta resposta
Seguir
respondida 10/07/2020 às 22:29
Raphael's user avatar
Raphael
11744 medalhas de bronze
Adicione um comentário
0
Seu programa parece muito complicado sem necessidade. Escreva seu programa em torno
dos dados. Sempre.
Em geral quando se pede esse tipo de solução para um aluno ele aprendeu já temas
como estruturas, estruturas de dados e alocação de memória. Não sei se é o seu
caso.
Vou te dar uns palpites apenas, afinal já passou muito tempo. Se precisar ainda de
ajuda volte a escrever.
De volta ao problema
Você tem um ou mais arquivos em disco com o acervo, porque parece que mantem
revistas e livros em arquivos separados, e tem umas coisas que precisa fazer com o
acervo, como listar todos por algum critério ou editar.
typedef struct
{
char titulo[40];
char editora[40];
char autor[40];
int caixa;
int ano;
char ISBN[20]; // 123-4-56-789ABC-D
char tipo; // 'L' para livro
} Livro;
Um Livro. Note que pode usar tamanhos mais modestos para os campos. 1.000 letras é
um pouco exagerado para autor, título ou editora como você havia usado. E int para
ISBN, um formato estabelecido no mundo todo, é errado.
E o acervo é uma coleção de Livro. Não há razão para usar dois arquivos a menos que
o enunciado exija. E um acervo pode ser algo mínimo como
typedef struct
{
int total;
Livro livro[200]
} Acervo;
E uma biblioteca poderia ser algo assim
Acervo loja1;
loja1.total = 0;
Para começar a ler do disco o acervo da loja 1.
Em geral se usaria alocação dinâmica de memória para esses campos todos. E muitas
vezes uma lista ligada ou outra estrutura de dados para os livros. Mas pode ser
mesmo um simples vetor.
E os arquivos?
Em geral na entrada os dados do arquivo são todos lidos para um vetor de estruturas
na memória. Todo o processamento é feito nessa estrutura. Ao final do programa a
estrutura é copiada de volta para o disco com outro nome. Aí se muda o nome do
arquivo original para uma extensão de backup e se muda o arquivo novo para o nome
original. Assim se você começou com "livros.txt" vai acabar com "livros.txt" e
"livros.bak". Nada original.