• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

magikRing

ajuda com ficheiros

14 mensagens neste tópico

boas...tou com um problemazito relacionado com ficheiros. o meu objectivo e fazer com que o prog leia um ficheiro e o passe para outro ficheiro, ou seja basicamente copie de um ficheiro, para outro ficheiro diferente

  eu tenho o codigo assim:

  (PS: a mim parece.me bem, mas nao funciona, o programa corre, mas nao faz o que eu quero)

estas sao as funcoes:

n=Lerficheirodes(texto);
guardarficheirocod(texto,n);

int Lerficheirodes(char texto[][80])
{
int i=0;
FILE *MENSAGENS;
MENSAGENS=fopen("descodificadas.txt","r"); 
   if(MENSAGENS!=NULL)
   {			   
		fscanf(MENSAGENS,"%s\n",& texto[i]);
		while(!feof(MENSAGENS))
		{
			i++;
			fscanf(MENSAGENS,"%c\n",&texto[i]);
		}
		fclose(MENSAGENS);

   }
   else{ 
          printf("\a\nErro a guardar para Ficheiro !");
	  return 0;
       }
}



void guardarficheirocod(char texto[][80], int n)
{
int i;
FILE *MENSAGENS;
MENSAGENS=fopen("codificadas.txt","w"); // cria um novo ficheiro por cima de outro existente
   if(MENSAGENS!=NULL)
   {
		   for(i=0;i<n;i++)
		   {
			  fprintf(MENSAGENS,"%s\n",texto[i]);
		   }
		  fclose(MENSAGENS);
		  puts("\a\n Mensagem codificada e guardada com sucesso\n");
   }
   else{ 
          printf("\a\nErro a guardar para Ficheiro !");
       }


	  
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum...de qualquer modo ele mostraria sempre qualquer coisa no ficheiro, coisa que nao faz, mas vou mudar e ver se da

PS: nao deu

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As linhas do ficheiro original podem ter espaços ? Se sim, tens de usar o fgets para ler a linha toda...

De resto não reparei em nenhum erro no código...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja vi onde esta o erro:

		   for(i=0;i<n;i++)
		   {
			  fprintf(MENSAGENS,"%s",texto[i]);
		   }
		  fclose(MENSAGENS); 
}

se eu em vez do n meter um numero ele ja grava de um ficheiro para outro, so que em vez de meter la a palavra que escrevo, mete lixo tambem.

nao percebo o que tenho de mudar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só agora é que reparei que não fazes return do numero de linhas na função de leitura. Provavelmente a função assumia um return de 0 linhas..

Por outro lado... na leitura estás a colocar o endereço do apontador da linha i do texto... retira o &

fscanf(MENSAGENS , "%s\n" , texto[i] );

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tirei o &, mas continua na mesma. se tiver la o n. e grava para o ficheiro mas mete tudo em branco. se em vez do n eu meter um numero, ele grava pa ficheiro o que eu quero mas mete tambem lixo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas ja colocaste a retornar o i na função de leitura? ja disse isso no post anterior

edit: Testei agora como disse e funciona. Cuidado que como a variavel i na leitura não tem o número de linhas mas sim o indice da última linha, por isso é melhor retornar i+1 ou contar o i de outra forma...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ahhh afinal nao continua igual. eu e que fiz asneira e meti o return i; antes de acabar o else.

pronto ja faz aquilo que eu quero que faca, mas continua com um ligeiro problema, continua a meter la lixo, para alem do que eu quero que ele meta la

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

case 3 : 
	n=Lerficheirodes(texto);
	codificartexto(texto,n);	
	guardarficheirocod(texto,n);

int Lerficheirodes(char texto[][80])
{
int i=0;
FILE *MENSAGENS;
MENSAGENS=fopen("descodificadas.txt","r"); 
   if(MENSAGENS!=NULL)
   {			   

		while(!feof(MENSAGENS))
		{
			i++;
			fscanf(MENSAGENS,"%s", texto[i]);

		}
		fclose(MENSAGENS);

   }
   else{ 
          printf("\a\nErro a guardar para Ficheiro !");
	  
       }
   return i;
}

void guardarficheirocod(char texto[][80], int n)
{
int i;
FILE *MENSAGENS;
MENSAGENS=fopen("codificadas.txt","w"); // cria um novo ficheiro por cima de outro existente
   if(MENSAGENS!=NULL)
   {
		   for(i=0;i<n;i++)
		   {
			  fprintf(MENSAGENS,"%s\n",texto[i]);
		   }
		  fclose(MENSAGENS);
		  puts("\a\n Mensagem guardada com sucesso\n");
   }
   else{ 
          printf("\a\nErro a guardar para Ficheiro !");
       }
	  
}

void codificartexto(char texto[][80], int n)
{
int linha, coluna;
for(linha=0; linha<n;linha++)
{
	for(coluna=0;texto[linha][coluna]!='\0';coluna++)
	{
			texto[linha][coluna]=cifra(texto[linha][coluna]);
	}
}


}[code]

[/code]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

usa a tag 

  código...  [ / code ] sem os espaços 

Para o array do texto começar em zero deves incrementar a variavel i depois da leitura, senão a primeira posição fica com lixo.

De resto, aqui esse código funciona ( como nao tens aí a função de cifra, pus uma coisa qualquer).

Vou ter de sair, deve ser um pormenor qualquer além do código que mostraste...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora