Existe uma função iteradora, ou seja, uma função que pode ser usada repetidamente para percorrer dados em sequência, neste caso um arquivo.
Podemos usa funções iteradoras com o comando "para" em modo especial. Veja o código abaixo:
local dir = inclua'igdir'
//primeiro testo se o arquivo existe:
se dir.arquivo_existe("arquivo.ext") entao
//vamos iniciar o laço para percorrendo todas as linhas do arquivo
para lin em es.linhas("arquivo.ext") inicio
imprima( lin ); //imprime cada linha lida;
fim
senao
imprima"arquivo não existe ou não tem acesso!";
fim
Perceba que é muito simples usar a função es.linhas() com o comando 'para', note que eu apenas imprimi cada linha
percorrida do arquivo, mas é possível fazer o que quiser com a linha lida, depende do propósito do programador.
Note, também, que não é necessário fechar o arquivo no final, pois a própria função iteradora cuida disso.
Usando o es.linhas() com o comando enquanto:
local dir = inclua'igdir'
se dir.arquivo_existe("arquivo.txt") entao
local arq_leia = es.linhas("arquivo.txt"); //retornando a função iteradora.
enquanto 1 inicio
lin = arq_leia();
se lin entao
imprima(lin);
senao
quebre;
fim
fim //fim enquanto
fim //fim se dir.arquivo_existe();
Outras formas de percorrer as linhas de um arquivo:
local a, erro_msg = es.abra("arquivo.txt", "leitura");
se a entao
loca lin = ''; //crio a variável com string vazia;
enquanto 1 inicio //um sempre será um então o laço é infinito,
//devendo ser quebrado por dentro com o comando quebre.
lin = a:leia(); //a cada repetição lê uma linha do arquivo;
se lin entao
imprima(lin);
senao //quando chegar ao fim lin será nulo então o laço é quebrado
quebre;
fim
fim //fim enquanto
a:feche(); //fechando o arquivo, nunca se esqueça disso!
senao
imprima("Erro:", erro_msg); //caso o arquivo não seja aberto, o primeiro retorno é nulo e o segundo uma mensagem.
fim
E se ao invés de ler linha por linha você quiser ler um bloco definido de bytes. Use o código abaixo:
local a, msg_erro = es.abra("arquivo.txt", "leitura");
se a entao
enquanto 1 inicio
bloco = a:leia( 7000 ); //lê 7000 bytes por vêz, ou até o final do arquivo se ele for menor que 7000;
se bloco entao
imprima(bloco);
senao
quebre;
fim
fim //fim enquanto
senao
imprima("Erro:", msg_erro); //caso haja erro ao tentar abrir o arquivo.
fim
Eu já fiz um tutorial sobre lêr aquivos que abrange outros detalhes, como leitura binária que pode ser usada para
copiar arquivo de fotos, vídeos etc. Dê uma olhadinha neste link:
http://linguagemprisma.br4.biz/prisma_forum/index.php?topic=13.0
É isso, até mais.
Encontrou algum erro? Alguma dúvida? Sinta-se a vontade em perguntar.