Jump to content
Sign in to follow this  
carjacker

Copia de ficheiro para ficheiro

Recommended Posts

carjacker

Cumprimentos a todos. :thumbsup:

Este e o meu primeiro post e agradeço desde já a vossa ajuda , tenho uma questão com o seguinte código:

int read_fileCliMun(CLIENTE *c){


FILE *fp, *fw;

fp = fopen(FILEPATH1, "r");
fw = fopen(FILEPATH3, "w");

if(fp==NULL)
	printf("Impossivel abrir o ficheiro2\n");
else{
	  while (fscanf (fp, "%s %s", &c->IDcliente, &c->municipio)!=EOF){		
			  fprintf (fw, "%s %s\n", (*c).IDcliente, (*c).municipio);
	  }	
}

printf("Ficheiro cli_mun.txt lido com sucesso!\n");
fclose(fp);
fclose(fw);
}

No fprintf quando escreve no ficheiro não passa para a próxima linha, vai escrevendo tudo de seguida e deveria ficar com o mesmo formato, como no exemplo a seguir:

FILEPATH1                                FILEPATH3

122345 "Marvão"                    122345 "Marvão" 122334 "Loures" ...

122334 "Loures"

...

Já revi, já comparei com outros códigos em que funciona assim, e este não funciona. 🤔

Share this post


Link to post
Share on other sites
IceBrain

Estás a programar em Windows, certo? O que acontece é que uma quebra de linha em Windows não é apenas \n como em Linux, é preciso que ponhas \r\n no fprintf.


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Share this post


Link to post
Share on other sites
carjacker

Obrigado funcionou com a alteração que indicaste, mas agora surgiu outro problema, imprime como no exemplo a seguir:

FILEPATH1                                  FILEPATH3

121232 Arruda dos Vinhos          121232 Arruda

                                                    121232 dos

                                                    121232 Vinhos

Ou seja quando detecta o espaço entre as palavras, ele automaticamente passa para outra linha.

Share this post


Link to post
Share on other sites
Baderous

Experimenta mudar o fscanf para:

fscanf (fp, "%s %[^\n]s", &c->IDcliente, &c->municipio)

Share this post


Link to post
Share on other sites
carjacker

Não resolveu a questão.

Já experimentei fgetc, a seguir guardar num vector, mas ai ele imprime tudo na mesma linha mas sem os espaços.

Share this post


Link to post
Share on other sites
Baderous

Eu testei agora e funcionou:

fp1.txt:

122345 Marvão
122334 Loures
121232 Arruda dos Vinhos

#include <stdio.h>

int main(void) {
        char id[50],nome[100];
        FILE *fp1 = fopen("fp1.txt","r");
        FILE *fp2 = fopen("fp2.txt","w");
        while (fscanf(fp1,"%s %[^\n]s",id,nome)!=EOF) {
                printf("Id: %s\nNome: %s\n",id,nome);
                fprintf(fp2,"%s %s\n",id,nome);
        }
        fclose(fp1);
        fclose(fp2);
        return 0;
}

fp2.txt:

122345 Marvão
122334 Loures
121232 Arruda dos Vinhos

É provável que o problema seja com as tuas variáveis.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.