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

nunocanc

Dúvidas C - Linhas de Ficheiro

9 mensagens neste tópico

Boas,

Estou a começar em C um projecto que me irá ajudar no futuro a automatizar uns processos aborrecidos, mas como estou muito no inicio estou a deparar-me com umas crises existenciais.

Então é assim:

- Tenho o programa que aceita um ficheiro de input (texto).

- Quero ler o ficheiro linha a linha,

- Em cada linha ele vai validar os dados que elá estão, retornando os erros

- A primeira e a ultima linha serão "tratadas" de maneira diferente.

Os meus "problemas" são os seguintes:

a) - Porque não consigo fazer printf onde está o cout? Dá-me erro ao compilar "Não posso converter ...."

:) - Existe maneira de saber quantas linhas tem o ficheiro de forma que quando chegue à ultima linha e faça outra coisa? Sem ter que abrir e fechar o ficheiro 2 vezes?

Estou a aprender à medida que vou avançando no processo, mas já procurei na web, mas não há algo simples a explicar estas dúvidas.

Agradeço desde já a ajuda dispensada.

Anexo o código já feito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a) O printf não sabe o que é uma string. Tens que utilizar

printf ("A Data é: %s \n",sub.c_str() );

que te vai retornar um char* com o conteúdo da string.

:) A maneira mais fácil e mais eficiente talvez seja manteres duas strings, uma com a linha actual e outra com a próxima. Assim, quando não conseguires ler a próxima, sabes que a actual é a última.

Outra hipótese é contares o número de /n que o ficheiro contém. E outra é a que já referiste, fazer ler todas as linhas até ao fim e depois voltar ao início...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para a pergunta b não daria se ele verificasse se file.EOF é igual a true? se fosse significava que estava no fim do ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Francamente... não sei! Não costumo trabalhar muito com ficheiros... :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Obrigado Pessoal pela ajuda.

Vou alterar o printf e vou tentar seguir a sugestão do Amigo TheDark para a contagem das linhas.

Penso que o file.EOF não vai servir os meus propósitos, pois acho que só será verdade se o fim da linha coincidir com o ficheiro. Como preciso de tratar da ultima linha antes de chegar ao fim do ficheiro, acho que não vai fazer o que pretendo. Acho eu, mas como já referi, não percebo muito de C (comigo é mais Perl e Awk :-) ).

Amigo Hipnoted, não te sei dizer se esta thread devia estar ou não na secção de C++, pois como sou novato, ainda não sei distinguir entre código C e código C++.

Se vocês não se importarem, se me deparar com mais "crises" vou vos pedir ajuda.

Mais uma vez obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ainda não sei distinguir entre código C e código C++.

Neste caso é simples: em C não existe cout, nem classes, e string é uma classe :) faz parte da biblioteca STL do C++

Por isso sim, isto é C++. Já agora, porque queres utilizar o printf em vez do cout?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Já agora, porque queres utilizar o printf em vez do cout?

Estou habituado a trabalhar com o PERL, se calhar mal habituado, e o printf é uma instrução que já conheço e que me apresenta os dados bonitinhos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para a questão da última linha, podes "atrasar" as operações, isto é, só depois de ler a linha 2 é que tratas da linha 1, e para as seguintes fazes a mesma coisa. quando chegares à última, também só a vais tratar depois de ler a próxima, mas como não há próxima...

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