Trabalhar com arquivos textos no Lazarus é bem fácil. Há várias maneiras de se tratar arquivos textos, desde o velho modo do Pascal (AssignFile/Reset/Rewrite/Append/CloseFile) aos métodos (LoadFromFile/SaveToFile) dos descendentes de TStrings. Mas para trabalhar com arquivos grandes é mais eficiente usar TFileStream.
Para demonstrar o uso do TFileStream montei um pequeno exemplo no Lazarus, como mostra a imagem abaixo.
O código do projeto acima encontra-se a seguir.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Bem, o projeto acima pode não demonstrar a eficiência do TFileStream, mas mostra a simplicidade de usá-lo. Basicamente a única coisa que precisamos nos preocupar é com o LineEnding que marca o fim de cada linha de um arquivo texto. Talvez um bom exemplo seja a gravação de dados em um arquivo de log de grande tamanho. Neste caso, o código para salvar as linhas ficaria bem parecido com o método ButtonSalvarClick, do exemplo acima. A única coisa que mudaria seria a linha abaixo:
FileStreamTxt := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmShareDenyWrite);
A qual seria melhor substituída pelo seguinte trecho:
if FileExistsUTF8(SaveDialog1.FileName) then begin
FileStreamTxt := TFileStream.Create(SaveDialog1.FileName, fmOpenWrite or fmShareDenyWrite);
FileStreamTxt.Position := FileStreamTxt.Size;
end else begin
FileStreamTxt := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmShareDenyWrite);
end;
O trecho acima garante que o arquivo não tenha seu conteúdo anterior apagado caso o arquivo já exista no caminho indicado. Assim as linhas serão adicionadas ao arquivo, algo mais lógico para quem está gravando informações em um log que tem dias e mais dias de conteúdo previamente gravado.
Outra ressalva a fazer, no método ButtonAbrirClick, é que o comando TMemo.Lines.Add adiciona automaticamente o LineEnding, sendo necessário, neste caso, remover este da linha a ser inserida, usando o comando StringReplace. Se for tratar o arquivo diretamente no TFileStream talvez não seja necessário usar este recurso.
Recentemente precisei criar um form com área interna transparente no Lazarus. Pesquisando no Google, encontrei uma dica para Delphi que foi facilmente adaptado para meu caso.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
É um curso muito interessante para iniciantes, que vai progressivamente aprofundando na linguagem. Pode ser usado o Lazarus como ambiente de teste do curso.
Esta semana o meu sobrinho torrou minha paciência pedindo a todo instante que corrigisse seus cálculos do máximo divisor comum (MDC). Para não perder mais tempo acabei criando uma aplicação para fazer os cálculos necessários. A aplicação foi feita no Lazarus 0.9.31 com FPC 2.5.1 e componente fpWeb. E compila tanto em Windows quanto em Linux. Também foi testada com sucesso no Lazarus 0.9.28 com FPC 2.4.2.
O link para aplicação compilada, incluindo código-fonte, é:
Foi a minha primeira incursão no mundo Lazarus/Web com o componente fpWeb. Outro componente interessante para aplicações Web no Lazarus é o Free Spider. O Free Spider é mais simples de usar, mas o fpWeb é mais poderoso.