Você está aqui: Delphi ::: Dicas & Truques ::: Arquivos e Diretórios

Como usar a função BlockRead() para ler um ou mais bytes de um arquivo

Quantidade de visualizações: 12040 vezes
A função BlockRead() pode ser usada quando precisamos ler um ou mais bytes em um arquivo não tipado, ou seja, um arquivo de tipo arbitrário não texto. Veja sua assinatura:

a) procedure BlockRead(var F: File; var Buf; Count: Integer); overload;

b) procedure BlockRead(var F: File; var Buf; Count: Integer; var AmtTransferred: Integer); overload;

Aqui F é um arquivo não tipado a partir do qual os dados serão lidos, Buf é qualquer variável na qual os dados lidos serão armazenados, Count é uma expressão do tipo Integer e representa a quantidade de registros a serem lidos e AmtTransferred é uma variável opcional do tipo Integer que representa a quantidade de registros realmente lidos.

Vamos ver um exemplo? Eis um trecho de código no qual lemos um byte de um arquivo chamado dados.dat:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm3.Button3Click(Sender: TObject);
var
  arquivo: File;
  valor: Byte;
begin
  // vamos abrir o arquivo para leitura
  AssignFile(arquivo, 'dados.dat');
  Reset(arquivo, 1);  // tamanho do registro = 1 byte

  // vamos ler um byte e guardá-lo na variável valor
  BlockRead(arquivo, valor, 1);

  // vamos exibir o valor do byte lido
  ShowMessage(IntToStr(valor));

  // vamos fechar o arquivo
  CloseFile(arquivo);
end;

Veja que usamos a função Reset() para abrir o arquivo para leitura e também para definir que cada registro lido terá o tamanho de 1 byte. Veja agora como podemos ler um inteiro Integer, ou seja, um grupo de 4 bytes:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm3.Button3Click(Sender: TObject);
var
  arquivo: File;
  valor: Integer; // equivale a 4 bytes
begin
  // vamos abrir o arquivo para leitura
  AssignFile(arquivo, 'dados.dat');
  Reset(arquivo, 4);  // tamanho do registro = 4 bytes

  // vamos ler um Integer e guardá-lo na variável valor
  BlockRead(arquivo, valor, 1);

  // vamos exibir o valor do Integer lido
  ShowMessage(IntToStr(valor));

  // vamos fechar o arquivo
  CloseFile(arquivo);
end;

Aqui nós definimos que cada registro lido terá o tamanho de 4 bytes. Para finalizar, veja como podemos ler um grupo de 4 bytes de cada vez e guardá-los em uma matriz de Byte:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm3.Button3Click(Sender: TObject);
var
  arquivo: File;
  valores: array[0..3] of Byte; // uma matriz de 4 bytes
  i: integer;
begin
  // vamos abrir o arquivo para leitura
  AssignFile(arquivo, 'dados.dat');
  Reset(arquivo, 1);  // tamanho do registro = 1 byte

  // vamos ler o grupo de 4 bytes e guardá-lo na matriz valores
  BlockRead(arquivo, valores, sizeof(valores));

  // vamos mostrar os valores lidos
  for i := 0 to 3 do
    begin
      ShowMessage(IntToStr(valores[i]));
    end;

  // vamos fechar o arquivo
  CloseFile(arquivo);
end;


Link para compartilhar na Internet ou com seus amigos:

Delphi ::: dbExpress ::: TSQLDataSet

Como obter a quantidade de campos nos registros retornados em um TSQLDataSet do Delphi usando a propriedade FieldCount

Quantidade de visualizações: 10942 vezes
Em algumas situações precisamos saber a quantidade de campos retornados em um objeto TSQLDataSet depois de dispararmos o comando SQL SELECT definido em sua propriedade CommandText. Para isso podemos usar a propriedade FieldCount. Veja sua assinatura:

property FieldCount: Integer;

Esta propriedade é definida originalmente em TDataSet e herdada pela classe TSQLDataSet.

Veja um trecho de código no qual disparamos um comando SQL SELECT em uma tabela contatos e exibimos a quantidade de campos dos registros retornados:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm3.Button1Click(Sender: TObject);
begin
  // vamos definir o comando SQL a ser executado
  SQLDataSet1.CommandText := 'SELECT * FROM contatos';

  // vamos executar o comando
  SQLDataSet1.Open;

  // vamos obter a quantidade de registros retornados
  ShowMessage('Quantidade de campos retornados: ' +
    IntToStr(SQLDataSet1.FieldCount));
end;

Ao executarmos este trecho de código teremos uma mensagem com o seguinte texto:

Quantidade de campos retornados: 5.

Note que a propriedade FieldCount inclui somente os campos listados na propriedade Fields. Quaisquer campos agregados listados pela propriedade AggFields não são incluídos na contagem.


Delphi ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como obter o índice inicial e final de um vetor usando as funções Low() e High() da unit System do Delphi

Quantidade de visualizações: 11837 vezes
Como os índices dos vetores em Delphi, diferente de outras linguagens, nem sempre começam em 0, não podemos deduzir que Length() - 1 retornará o índice final do vetor. Desta forma, podemos usar as funções Low() e High(), ambas presentes na unit System.

A função Low() retorna o índice inicial do vetor, enquanto High() retorna o índice final. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm3.Button1Click(Sender: TObject);
var
  valores: array[11..20] of Integer;
  inicio, fim: Integer;
begin
  // vamos obter o índice inicial do vetor
  inicio := Low(valores);

  // vamos obter o índice final da vetor
  fim := High(valores);

  // vamos exibir o resultado
  ShowMessage('O índice inicial do vetor é: ' + IntToStr(inicio));
  ShowMessage('O índice final do vetor é: ' + IntToStr(fim));
  ShowMessage('O tamanho do vetor é: ' + IntToStr((fim - inicio) + 1));
end;

Lembre-se desta dica quando precisar percorrer os elementos de um vetor ou uma matriz usando o laço For da linguagem Delphi.


Delphi ::: VCL - Visual Component Library ::: TListBox

Como selecionar um item de uma ListBox do Delphi em tempo de execução usando a propriedade ItemIndex

Quantidade de visualizações: 15426 vezes
É possível selecionar, em tempo de execução, um dos itens de uma ListBox. Para isso, só precisamos definir um valor para a propriedade ItemIndex. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

procedure TForm1.Button2Click(Sender: TObject);
begin
  // vamos selecionar o segundo item na ListBox
  ListBox1.ItemIndex := 1; // o índice do primeiro item é 0

  // note que este código não funciona para ListBoxes de
  // seleção múltipla
end;

Note que este código não se aplica às ListBoxes de seleção múltipla.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 81 usuários muito felizes estudando em nosso site.