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

nata79

Reescrever linha de um ficheiro

11 mensagens neste tópico

Boas,

o probelema é o seguinte, tenho uma palavra na primeira linha de um ficheiro e preciso substituila por outra sem danificar o resto do ficheiro...

alguma ideia de como faze-lo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Abres o ficheiro, lês a 1ª linha, abres outro ficheiro, escreves a 1ª linha modificada para esse ficheiro. Depois lês do 1º ficheiro linha a linha e escreves no 2º. No fim apagas o 1º ficheiro e mudas o nome ao 2º.

Outra hipótese é leres a 1ª linha, e de seguida o resto do ficheiro para um array onde ele caiba todo. Depois modificas a 1ª linha, e escreves tudo de novo para o ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Podes ler a primeira linha do ficheiro, fazer um split por delimitador de palavra, ou seja, se tens a palavra separada por espaço, '-', etc...com isto sabes o tamanho da palavra.

Como 1char = 1byte (ASCII) usas a escrita localizada em ficheiros para escrever por cima.

Não experimentei claro...mas é uma ideia  ;)

Cumprimentos

Hobbes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não funciona se a palavra nova for maior que a antiga... e se for mais pequena? Preenches com espaços?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yah...so pensei com o mesmo tamanho. :P

Para tamanhos diferentes acho que fazia como disseste, ler do 1º e escrever no 2º até certo ponto, escrever o que se quer em determinado lugar, e continuar a reescrever o 1º no 2º.

Cumprimentos

Hobbes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mais um pequeno probelema,

ao copiar o conteudo do primeiro ficheiro para o segundo, com a primeira linha alterada, no fim do ficheiro aparece-me um caracter esquesito que nenhum editor de texto consegue ler, a forma que arranjei para dar a volta a isso foi calcular o numero de caracteres do 1º ficheiro e copiar para o 2º caracter a caracter excepto o ultimo caracter...

alguem sabe o porqê disto acontecer ou se existe alguma solução mais eficiente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem ver o teu código é complicado saber o que está a acontecer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

oldfile = fopen("old", "r");
newfile = fopen(user, "w");

while(fgetc(oldfile) != '\n') ;

fprintf(newfile, "%s\n", newpass);

while(!feof(oldfile)){fgetc(oldfile); i++;}

fseek(oldfile, 0, SEEK_SET);
while(fgetc(oldfile) != '\n') ;

i--;

while(i){
	c = fgetc(oldfile);
	fputc(c, newfile);
	i--;
}

fclose(oldfile);
fclose(newfile);

este é o código que tenho feito e funciona, o que faz é copiar o conteudo de um ficheiro para outro excepto a primeira linha (que é a que queria alterar) e o último caracter que não sei o que é de onde vem ou o que está lá a fazer, só sei que quando é escrito no ficheiro destino este não abre com um editor de texto e ao fazer cat aparece-me um simbolo estranho no fim...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É porque o feof só retorna 1 quando lê o EOF, que é o caracter estranho que deves estar a ver.

Para ser mais eficiente, podes utilizar o fgets no lugar do feof, que retorna 0 quando não tem mais nada para ler. Metes o fgets dentro da condição do while, a ler para um array de char, e dentro do while fazes um fputs a escrever o conteúdo do array para o ficheiro de saída. Assim já não tens que andar para trás e para a frente a contar caracteres. Além de que ler strings é muito mais rápido que ler caracter a caracter.

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