Ir para conteúdo
Fórum Script Brasil
  • 0

Como alterar uma linha específica do arquivo?


Robson Pormann Dias

Pergunta

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);
	
	}
	}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...