Ir para o conteúdo
nata79

Reescrever linha de um ficheiro

Mensagens Recomendadas

nata79    0
nata79

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hobbes    0
Hobbes

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hobbes    0
Hobbes

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nata79    0
nata79

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nata79    0
nata79

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

É 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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade