question

Programacao c: Como mover o ponteiro de arquivo para a proxima linha..?

a minha pergunta é tão simple como isso....
Como mover o ponteiro do arquivo para a próxima linha...???...
podemos usar fseek...?
resposta Resposta
Primeiro você precisará determinar o que conta como uma nova linha. A maioria dos editores/terminais de texto use uma das três seqüências "\n", "\r" ou "\r\n" para designar uma nova linha. Para verificar se uma nova linha, eu uso essa função: int eol (int c, FILE fluxo) {se (c = = '\n') retornar 1;         se (c = = '\r') {se ((c = getc(stream))! = '\n') ungetc (c, stream);                 retornar 1;         } return 0; } Uma vez que você tem uma função que pode verificar se há uma nova linha, você só tem que escrever uma função que lê em caracteres até encontrar uma nova linha. Aqui está uma função que eu escrevi: int skipline(FILE stream) {int c;

        enquanto ((c = getc(stream))! = EOF &&! eol (c, stream));         retornar c = = EOF; } Isso retorna 0 se ele com êxito ler até o final de uma linha e 1 se ele ler até o final do arquivo.

@ Andrew s: A implementação de c apenas converte o formato que ele usa nativamente para '\n'. Ele não precisa traduzir "\r" e "\r\n" para "\n". Em ordem para gravar programas que lidam com todos os três formatos como novas linhas, uma função de gosto do que escrevi é necessário.

EDIT: Só para esclarecer o meu ponto, se você usar uma plataforma que não traduz CRLF e CR para '\n' (o que é perfeitamente legal, que diz respeito à C) e, em seguida, leia nas linhas do texto até que você alcangue '\n' e impressão de cada linha em hexadecimal, você encontrará que '\r' nunca Obtém convertido em '\n' e que é deixado no buffer.

Aqui está um exemplo de tal programa: # include <stdio.h>int estático readline (char s, size_t size) {int c;

tamanho; enquanto ((c = getchar())! = EOF && c! = '\n') se (tamanho) { s + + = c; tamanho; } s = '\0'; retornar c = = EOF; } static void printhex(char s) {enquanto ( s) printf ("% 02 x", (sem assinatura char) s + +); puts("");}

int main(void) {char buffer [20];

enquanto (! readline (buffer, buffer de sizeof)) printhex(buffer); return 0; } Quando eu passar em "asd\rdsa\r\n" eu recebo uma saída de "61 73 64 0D 64 73 61 0D". No entanto, se eu substituir a instrução "c! = '\n'"com"! eol (c, stdin)", vou buscar uma saída de: 61 73 64 64 73 61, que é o que você quer se você estavam planejando o processamento de arquivos que foram gravados com editores de texto diferentes, em várias plataformas. O que sua plataforma considera uma linha nem sempre é o que você quer considerar uma linha, por isso é necessário verificar se há CR e CRLF explicitamente se sua plataforma não traduzi-los para '\n'.</stdio.h>

ComentáriosComentários
Acho que a resposta não está correta ou que você gostaria de acrescentar mais
alguma informação? Envie o seu comentário abaixo..

Guest


HTML não é permitido!

Image Code

Digite os caracteres que aparecem na imagem por isso sabemos que você é humano!

Receber um email quando alguém acrescenta outro comentário a esta pergunta


Topo da página


Home  Terms
Copyright © Accelerated Ideas 2005-2024
All rights reserved