Bom dia! Gostaria de saber se é possível alterar uma linha específica de um arquivo. Eu preciso fazer um controle de estoque para um trabalho e no final da linha coloquei a letra D para especificar os carros disponíveis, quando selecionado, pego a linha e faço uma concatenação com a letra A de alugado. No entando, o que eu gostaria de fazer é trocar a linha que estava com final D pela linha que agora está com final A mas não consigo fazer isso. A linha é sempre salva no final do arquivo e a linha que eu havia selecionado continua lá com a letra D. Alguém sabe se é possível fazer isso? Trocar uma linha pela outra? Segue o código.
// Declaração de livrarias da plataforma.#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<time.h>// Declaração das váriaveis do tipo: número, caractere e arquivo de texto. char opcao, nome[150], rg[20], cpf[20], CNH[20], opclista, datanasc[20], alugado[20]="ALUGADO", A[2]="A";char txt[100]=".txt", telefone[10], status[20],Categoria[20], pLc[7];char UF[2], cidade[150], bairro[150], rua[150], ncasa[50], marca[15], opp, modelo[15], km[15], anocarro[4], categoria[20];char opcidade, opcong, opcCategoria, cpfpagamento[20], ticket [10000];FILE*RegistroLocacao,*RegistroCarro,*ListaCarros,*RegistroRelat;char dateStr[9], timeStr[9], linhacarro [100], registrocarro [100], opcentrega, opcrelat, opcprin, telaprin, devolucao[20];char localrelat [1000]="C:\\Users\\Public\\Documents\\Locacoes_.txt";char localc[1000]="C:\\Users\\Public\\Documents\\Categoria_";char localceco[1000]="C:\\Users\\Public\\Documents\\Categoria_ECONOMICO.txt";char localcint[1000]="C:\\Users\\Public\\Documents\\Categoria_INTERMEDIARIO.txt";char localcexe[1000]="C:\\Users\\Public\\Documents\\Categoria_EXECUTIVO.txt";char locallocacao[1000]="C:\\Users\\Public\\Documents\\Locacao_";float valorLocacao =0, valorticket =0;int qtdias =0, taxa =0, diasatraso =0, linha, i =0, horasatraso =0, len =0;char* listacarro [10000];char mec[100], s =0;
linhalocacao(){
printf (" |-------------------------------------------------|\n");
printf (" | Legal Rent A-car - LOCACAO |\n");
printf (" |-------------------------------------------------|\n");}bool seekLine(FILE*f,int lineNumber,char*line){int currentSeek = ftell(f);
fseek(f,0, SEEK_SET);while(--lineNumber &&(fgets(linhacarro,256, f)!= NULL));if(!lineNumber)
fgets(linhacarro,256, f);
fseek(f, currentSeek, SEEK_SET);return!lineNumber;}int main (){
fprintf (RegistroLocacao,"\n\nNOME: %s\nDATA NASCIMENTO: %s\nRG: %s\nCPF: %s\nCNH: %s\nEndereço: %s, %s, %s, %s - %s\nNUMERO DE TELEFONE: %s", nome, datanasc, rg, cpf, CNH, rua, ncasa, bairro, cidade, UF, telefone);
fprintf (RegistroRelat,"\n\nNOME: %s CPF: %s TELEFONE: %s", nome, cpf, telefone);
fclose(RegistroLocacao);
fclose (RegistroRelat);// Escolha da categoria de carros dividida em três opções.
system("cls");
linhalocacao();
printf("\n\n\n(1). ECONOMICO - DIARIA: R$ 86.61 \n\n(2). INTERMEDIARIO - DIARIA: R$ 116.61\n\n(3). EXECUTIVO - DIARIA: R$ 166.61\n\n");
printf("Digite a opcao desejada: ");
scanf("%c",&opcCategoria);if(opcCategoria =='1'){// Lendo arquivos previamente criados.ListaCarros= fopen(localceco,"r");if((ListaCarros= fopen(localceco,"r"))== NULL){
printf("Erro ao abrir o arquivo!\n");
exit(1);}RegistroLocacao= fopen (locallocacao,"a");if((RegistroLocacao= fopen(locallocacao,"a"))== NULL){
printf("Erro ao abrir o arquivo!\n");
exit(1);}RegistroRelat= fopen (localrelat,"a");if((RegistroRelat= fopen(localrelat,"a"))== NULL){
printf("Erro ao abrir o arquivo!\n");
exit(1);}
system("cls");
linhalocacao();
setbuf(stdin, NULL);// Exibindo o conteúdo do arquivo para que o cliente possa escolher o carro.while(fgets(linhacarro,10000,ListaCarros)!= NULL){
listacarro[i]= strdup (linhacarro);
i++;
printf("(%d). %s", i, linhacarro);}
i =0;
printf("\n\nInforme a opcao desejada: ");
scanf ("%d",&linha);
setbuf(stdin, NULL);// Buscando linha especifica dentro do arquivo texto.if(seekLine(ListaCarros, linha, linhacarro))
len = strlen (linhacarro);
len = len -2;
fprintf (RegistroLocacao,"\nCarro: %s", linhacarro);
fprintf (RegistroRelat,"\nCarro: %s", linhacarro);for(s =0; s < len; s++){
mec[s]= linhacarro[s];}
strcat (mec, A);
printf ("%s", mec);// Cálculo de valor da locação * quantidade de dias escolhidos pelo cliente.
printf("\n\nDeseja alugar o carro por quantos dias?\n\n");
scanf ("%d",&qtdias);
setbuf(stdin, NULL);
valorLocacao =86.61;
valorLocacao = valorLocacao * qtdias;
printf ("\n\nDigite a data de devolucao do veiculo: ");
scanf ("%s",&devolucao);
setbuf (stdin, NULL);// Coleta da data da locação, salvando a data e o carro alugado no arquivo locallocacao.
_strdate (dateStr);
_strtime (timeStr);
fprintf (RegistroLocacao,"\nData de locacao: %s %s Data de devolucao: %s %s", dateStr, timeStr, devolucao, timeStr);
fprintf (RegistroRelat,"Data da locacao: %s %s Data de devolucao: %s %s", dateStr, timeStr, devolucao, timeStr);
fclose (RegistroRelat);
fclose (ListaCarros);
fclose (RegistroLocacao);ListaCarros= fopen(localceco,"a");if((ListaCarros= fopen(localceco,"a"))== NULL){
printf("Erro ao abrir o arquivo!\n");
exit(1);}while(fgets(linhacarro,10000,ListaCarros)!= NULL){
listacarro[i]= strdup (linhacarro);}if(seekLine(ListaCarros, linha, linhacarro))
fprintf (ListaCarros,"\n%s", mec);
fclose (ListaCarros);}}
Pergunta
Robson Pormann Dias
Bom dia! Gostaria de saber se é possível alterar uma linha específica de um arquivo. Eu preciso fazer um controle de estoque para um trabalho e no final da linha coloquei a letra D para especificar os carros disponíveis, quando selecionado, pego a linha e faço uma concatenação com a letra A de alugado. No entando, o que eu gostaria de fazer é trocar a linha que estava com final D pela linha que agora está com final A mas não consigo fazer isso. A linha é sempre salva no final do arquivo e a linha que eu havia selecionado continua lá com a letra D. Alguém sabe se é possível fazer isso? Trocar uma linha pela outra? Segue o código.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.