Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Чтение шестнадцатеричных значений из файла в Delphi для переменных типа LongWord

Delphi , Интернет и Сети , Браузер

Если вы только начинаете изучать Delphi и столкнулись с необходимостью чтения шестнадцатеричных значений из текстового файла, эта статья поможет вам разобраться с этой задачей. В примере, который вы привели, у вас есть текстовый файл Script.txt, содержащий строки в формате 0000FCA2:FA2C и 0000BC8D:F21C. Вам нужно преобразовать эти строки в переменные типа LongWord.

Шаг 1: Создание класса для чтения и парсинга файла

Сначала создадим класс TDataFile, который будет использоваться для чтения и парсинга данных из файла. Класс TDataLine будет содержать логику преобразования строк в числа:

uses
  System.Generics.Collections;

Type
  TDataLine = class
  private
    FHexValue: LongWord;
    FAddress: LongWord;
  public
    constructor Create(const aLine: String);
    property HexValue: LongWord read FHexValue;
    property Address: LongWord read FAddress;
  end;

  TDataFile = class(TObjectList<TDataLine>)
  public
    constructor Create; reintroduce;
    procedure LoadFromFile(const aFileName: String);
  end;

Шаг 2: Реализация конструктора и методов класса

Далее реализуем конструктор класса TDataLine, который будет разделять строку на две части по символу : и преобразовывать их в шестнадцатеричные числа:

constructor TDataLine.Create(const aLine: String);
var
  Buffer: TArray<string>;
  Tmp: Int64;
begin
  Buffer := aLine.Split([':'], TStringSplitOptions.ExcludeEmpty);
  if TryStrToInt64('$' + Buffer[0], Tmp) then
    FHexValue := Tmp and $FFFF;
  if TryStrToInt64('$' + Buffer[1], Tmp) then
    FAddress := Tmp;
end;

Также реализуем конструктор и метод LoadFromFile класса TDataFile, который будет загружать данные из файла:

constructor TDataFile.Create;
begin
  inherited Create(True);
end;

procedure TDataFile.LoadFromFile(const aFileName: String);
var
  DataLine: TDataLine;
  Buffer: TStringList;
  sLine: String;
begin
  Buffer := TStringList.Create;
  try
    Buffer.LoadFromFile(aFileName);
    for sLine in Buffer do
      Add(TDataLine.Create(sLine));
  finally
    FreeAndNil(Buffer);
  end;
end;

Шаг 3: Использование класса для загрузки данных из файла

Теперь вы можете использовать класс TDataFile для загрузки данных из файла, например, в обработчике события FormCreate:

procedure TForm19.FormCreate(Sender: TObject);
var
  DataFile: TDataFile;
begin
  DataFile := TDataFile.Create;
  try
    DataFile.LoadFromFile('Data.txt');
    for var Data in DataFile do
    begin
      // Здесь вы можете использовать значения Address и HexValue
    end;
  finally
    FreeAndNil(DataFile);
  end;
end;

Альтернативный способ: использование динамического массива

Если вам нужно работать с большим количеством данных, вы можете использовать динамический массив для хранения пар значений:

type
  TAddress = record
    Address: LongWord;
    Value: LongWord;
  end;
  TVarAddress = array of TAddress;

procedure GetAddressesFromTextFileIntoDynArray(FileName: String; var Arr: TVarAddress);
var
  F: TextFile;
  s, sAddr, sVal: string;
  len, p: Integer;
begin
  AssignFile(F, FileName);
  try
    SetLength(Arr, 0);
    ResetFile(F);
    len := 0;
    while not Eof(F) do
    begin
      Readln(F, s);
      p := Pos(':', s);
      sAddr := Copy(s, 1, p - 1);
      sVal := Copy(s, p + 1, Length(s) - p);
      inc(len);
      SetLength(Arr, len);
      Arr[len - 1].Address := StrToIntDef('$' + sAddr, 0);
      Arr[len - 1].Value := StrToIntDef('$' + sVal, 0);
    end;
  finally
    CloseFile(F);
  end;
end;

Используйте GetAddressesFromTextFileIntoDynArray для загрузки данных в динамический массив Arr, после чего вы можете обращаться к его элементам.

Заключение

Теперь вы знаете, как читать шестнадцатеричные значения из текстового файла в Delphi и сохранять их в переменные типа LongWord. Вы можете использовать предложенные классы или динамический массив в зависимости от ваших нужд. Удачи в изучении Delphi!

Создано по материалам из источника по ссылке.

Описание процесса чтения шестнадцатеричных значений из файла в Delphi для использования в переменных типа `LongWord`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:25:13/0.0035419464111328/1