sábado, 13 de outubro de 2012

Tratando arquivos textos via TFileStream

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.


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.

Esta dica deve funcionar no Windows, Linux e Mac. Mais informações em: http://wiki.freepascal.org/File_Handling_In_Pascal

[]'s,

Ericson Benjamim.

quarta-feira, 6 de junho de 2012

Form com área transparente no Lazarus/Windows

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.



Infelizmente esta dica funciona apenas no Windows (não esquecer de incluir a unidade Windows na cláusula Uses).

Adaptado a partir de Get transparent form - Forms - Tips & Tricks - Greatis Delphi Pages.

[]'s,

Ericson Benjamim.

sábado, 14 de abril de 2012

Introdução ao Pascal

Também resolvi fazer outro mirror de outro curso, muito bom, desenvolvido pelo REENGE, também da Unicamp.


Falta apenas colocar as respostas dos exercícios.

[]'s,

Ericson Benjamim.

Curso Aprendendo a programar em Pascal

Encontrei um curso de programação em Pascal no site da Unicamp e resolvi criar um mirror para ele:


É um curso muito interessante para iniciantes, que vai progressivamente aprofundando na linguagem. Pode ser usado o Lazarus como ambiente de teste do curso.

[]'s,

Ericson Benjamim.