Como eu posso ler um arquivo(isso eu sei), pesquisar um nome dentro e pegar a linha referente [RESOL

1. Como eu posso ler um arquivo(isso eu sei), pesquisar um nome dentro e pegar a linha referente [RESOL

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/02/2015 - 18:16h

Boa tarde,
Eu estou com dúvida, como eu posso pesquisar um nome dentro de um arquivo sem ser binário e imprimir a linha referente a pesquisa.

#include <stdio.h>
#include <stdlib.h>


typedef struct produto{
int codigo;
char nome[50];
int estoque;
float preço;
}sp;

int main()
{
FILE *produto;

sp um;


um.codigo = 10000;


int i, num, opção, quantidade, totalproduto[100],;
char linha[100], linhap[1000], , pesquisa[160], descrição[1000];

printf("Escolha uma opção:\n\n[1]Cadastro\n[2]Venda\n[3]Sair\n");
scanf("%d", &opção);

if (opção == 1)
{
printf("\nEscolha uma de cadastro:\n[1]Cadastrar produto\n[2]Pesquisar produto\n[3]Altera/Excluir as informações cadastradas\n");
scanf("%d", &num);

switch (num)
{
case 1:printf("\nCadastro selecionado\n");
printf("\nQuantos produtos serão cadasatrados:\n");
scanf("%d", &um.estoque);

if (um.estoque > 50 || um.estoque == 0){
printf("Impossivel cadastrar essa quantidade\n");
exit(1);
}
else
{

produto = fopen("produto.txt", "w");

if (produto == NULL){
printf("Impossivel abrir o arquivo\n");
exit(1);
}

fprintf(produto, "Produtos no estoque:\n\n");
fprintf(produto,"\nProduto estoque preço codigo\n");

for (i = 0; i < um.estoque; i++)
{
while (getchar() != '\n'); //limpar buffer
printf("\nDigite os produtos para cadastro:\n");
gets_s(um.nome);

while (getchar() != '\n');
printf("\nInforma a quantidade:\n");
scanf("%d", &totalproduto);

while (getchar() != '\n');
printf("\nDigite a descrição produtos para cadastro:\n");
gets(descrição);

while (getchar() != '\n');
printf("\nDigite o preço:\n");
scanf("%f", &um.preço);//como cast para double

fputs(um.nome, produto);
fprintf(produto, " %d", *totalproduto);
fprintf(produto, " %f", um.preço);//como cast para double
fprintf(produto, " %d", (um.codigo + i));
fprintf(produto, "\n\n");
fprintf(produto, "Descrição:\n\n");
fputs(descrição, produto);
fprintf(produto, "\n\n");

}
um.codigo++;
}
fclose(produto);
exit(0);

case 2:printf("\nPesquisa selecionado\n");

printf("Qual produto a ser pesquisado:\n");
scanf("%s", &pesquisa);

produto = fopen("produto.txt", "r");

if (produto == NULL){
printf("Impossivel abrir o arquivo\n");
exit(1);
}

i = 0;
while ((linhap[i] = fgetc(produto)) != EOF){
if (linhap[i] != pesquisa[i]){
while ((fgets(linha, sizeof(linha), produto)) != pesquisa){
puts(linha);
system("pause");
exit(0);
}
}
else
printf("\nNão existe este produto\n");
exit(1);
}
i++;

fclose(produto);


case 3:printf("\nAltera/Excluir as informações de produto selecionado\n");

printf("\nEscolha uma opção:\n[1]Adicionar novos produtos\n[2]Excluir produtos\n[3]Alterar produto\n");
scanf("%d", &num);

switch (num)
{
case 1:printf("\nAdicionar novos produtos selecionado\n");

case 2:printf("\nExcluir produtos selecionado\n");

case 3:printf("\nAlterar produto selecionado\n");


default:printf("\nOpção invalida\n");
break;
}

default:printf("\nOpção invalida\n");
break;
}
}
return 0;
}



  


2. Re: Como eu posso ler um arquivo(isso eu sei), pesquisar um nome dentro e pegar a linha referente [RESOL

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 23/02/2015 - 20:36h


Boa noite.

Um bom método para isso é ler a linha do arquivo e comparar pedaços dessa linha com a string desejada. Em caso de sucesso, imprime a linha.

Para fazer isso, você pode usar um loop e a função strncmp.

Por exemplo, digamos que você queira encontrar a palavra 'linux' na string "viva a comunidade viva o linux".


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int strpart (char *str, char *search)
{
char *s = str;
int l = strlen(search);

while (*s++) {
if ( !strncmp(s, search, l))
return ((int)(s - str));
}

return -1;
}

int main (void)
{
char *vol = "viva a comunidade viva o linux";
char *s = "linux";

printf ("%d\n", strpart(vol, s));

return 0;
}


A função é bem simples. Retorna a posição do início da string encontrada em caso de sucesso ou -1 em caso de erro. Então, no seu programa, você pode utilizá-la fazendo uma comparação com -1.

Se for diferente de -1, então imprime linha.

Espero ter ajudado,
Qualquer dúvida posta denovo,
Enzo Ferber
[]'s


3. Re: Como eu posso ler um arquivo(isso eu sei), pesquisar um nome dentro e pegar a linha referente

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/02/2015 - 12:36h

Bom dia,

Obrigado pela ajuda, esse modo resolveu o erro no programa.

Rittmeyer








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts