linhas duplicadas

1. linhas duplicadas

Pedro
javamizer

(usa Suse)

Enviado em 04/03/2008 - 20:37h

Olá pessoal, tenho um arquivo texto, e a partir deste vou gerar um outro com apenas os caracteres que eu escolher no primeiro arquivo. (Conversão de layout).
Estou com um problemão pois o loop está postando duas vezes a sequencia de caracteres que eu escolho:

#include <stdio.h>
int main(void)
{
FILE * arquivoentrada;
FILE * arquivosaida;
char mybuff[201];

arquivoentrada=fopen("entrada","r");
arquivosaida=fopen("saida","w");

while(!feof(arquivoentrada)){
fgets(mybuff, 201, arquivoentrada);

for(int i = 0; i < 4; i++){
fputc( mybuff[i], arquivosaida);
}
fputc('\n', arquivosaida);
}
}

/* se tenho a linhas:
123456789...
987654321...

a saida é:
12345
12345
98765
98765

está dobrando as linhas! porque ?









  


2. ninguem ?

Pedro
javamizer

(usa Suse)

Enviado em 05/03/2008 - 22:55h

será que tá mto dificil de entender? hehe


3. fputc

Pedro
javamizer

(usa Suse)

Enviado em 10/03/2008 - 01:57h

O segundo fputc() coloca uma quebra de linha no arquivo de saida depois que a parte que eu armazenei em mybuff[] é inserida no arquivo de saida


4. code

Pedro
javamizer

(usa Suse)

Enviado em 10/03/2008 - 03:28h

//esse código faz o que eu quero:

char mybuff[201];

int temp = 1;
while(fgets(mybuff, 201, arquivoentrada)!=NULL)
{
if (temp%2)
{
for(int i = 86; i < 104; i++)
{
fprintf(arquivosaida, "%c", mybuff[i]);
}
fputc('\n', arquivosaida);
}
++temp;
}
fclose(arquivoentrada);
fclose(arquivosaida);
/*parece que a duplicação é feita quando o while reiterage, então só posto se a iteração for impar, hehe que gambiarra!*/


5. Cabuloso

Josimar Zimermann
josimar

(usa Slackware)

Enviado em 11/03/2008 - 00:10h

Que cabuloso mano!!
Não consegui encontrar erro no seu código fonte.
Muito estranho mesmo isso acontecer!
Mas nada que uma gambiarra não resolva.

Falou!


6. Descobri o problema!!

Josimar Zimermann
josimar

(usa Slackware)

Enviado em 11/03/2008 - 00:22h

veja só! as linhas while(!feof(arquivoentrada)) e
fgets(mybuff, 201, arquivoentrada) acabavam por fazer a releitura do mesmo ponto.
Eis a solução:

#include <stdio.h>

int main() {
FILE *input;
FILE *output;
char buffer[201];
int i;

input = fopen("entrada.txt","r");
output = fopen("saida","w");

while(fgets(buffer, 201, input)) {
for(i=0; i<4; i++) {
fputc(buffer[i], output);
}
fputc('\n', output);
}
return 0;
}


Valeu!!


7. Re: linhas duplicadas

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 11/03/2008 - 03:26h

Essa é boa.

olhando, não consigo ver problema. Chegando em casa vou testar.


8. cabuloso

Pedro
javamizer

(usa Suse)

Enviado em 11/03/2008 - 20:32h

o code do amigo não funfo aki... e o pior é que se eu usar fputs() no lugar de fputc() as linhas não são duplicadas!!! 8o
com certeza deve ser algum efeito colateral de fputc(). E os loops não são, pq já tentei ate fazer uma invocação de fputc() para cada caractere que eu quero pegar do buffer (um absurdo neh), mas as linhas foram duplicadas novamente!!! Como eu disse, com aquela "gambiarra" deu certo, entreguei o programa pro usuário hoje... Mas ai se ele tivesse o fonte e soubesse C hehe. Deixo então um ótimo tema pra pesquisas avançadas...



9. Gambiarra mano

Josimar Zimermann
josimar

(usa Slackware)

Enviado em 11/03/2008 - 21:22h

O testei o meu código e funfou legal...
Mas enfim ... fica o desafio aí ...

Valeu!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts