Если вы только начинаете изучать 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.