sábado, 14 de novembro de 2009

Problema 6.2

O problema 6.2 é muito simples.

1.def primeira_linha (nome_fich):
2.   """
3.   le a primeira linha do ficheiro conforme e guardado
4.   """
5.   conteudo = open(nome_fich,'r')
6.   cont = conteudo.readline()
7.   conteudo.close()
8.   return cont

Abrimos o ficheiro para leitura, lemos uma linha (forçosamente a primeira) e guardamos o resultado, fechamos o ficheiro e, finalmente, devolvemos o resultado guardado.

Durante uma das aulas práticas alguém perguntou: e se fosse a terceira linha, ou outra qualquer? Foi uma questão pertinente, mas também neste caso a solução é trivial.

01.def le_linha_n(nome_fich,n):
02.   """
03.   lê a n-ésima linha do ficheiro caso exista e mostra-a.
04.   Assume n > 0.
05.   """
06.   f_in = open(nome_fich, 'r')
07.   for i in range(n-1):
08.      f_in.readline()
09.   linha = f_in.readline()
10.   f_in.close()
11.   return linha

Entre as habituais instruções de abertura e fecho do ficheiro, temos agora um ciclo para ler sem guardar as (n-1) primeiras linhas. Saídos do ciclo, lemos a linha seguinte (a n-ésima linha) e guardamos. No final, devolvemos o resultado. Esta forma de fazer está relacionada com o facto de um ficheiro ser um objecto de acesso sequencial e não de acesso directo, como é o caso das listas, por exemplo. Claro que podemos navegar pelo ficheiro, reposicionando a janela de acesso com a instrução seek(). Isso não invalida no entanto o que dissemos. A menos que soubéssemos a posição do primeiro caracter da linha n! Experimente a solução apresentada e veja como ela reage a linhas inexistentes.

Sem comentários:

Enviar um comentário