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

Сохранить и загрузить двумерный динамический массив

Delphi , Синтаксис , Массивы

Сохранить и загрузить двумерный динамический массив

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

type
   T2DBooleanArray = array of array of Boolean;

 procedure Save2DBooleanArray(const A: T2DBooleanArray; S: TStream);
 var
   writer: TWriter;
   i: Integer;
 begin
   Assert(Assigned(S));
   writer := TWriter.Create(S, 8096);
   try
     writer.WriteInteger(Length(A));
     for i := 0 to Length(A) - 1 do
     begin
       writer.WriteInteger(Length(A[i]));
       writer.Write(A[i, 0], Length(A[i]) * sizeof(A[i, 0]));
     end; { For }
   finally
     writer.Free;
   end; { Finally }
 end;

 procedure Load2DBooleanArray(var A: T2DBooleanArray; S: TStream);
 var
   reader: TReader;
   i, numrows, numcols: Integer;
 begin
   Assert(Assigned(S));
   reader := TReader.Create(S, 8096);
   try
     numrows := reader.ReadInteger;
     SetLength(A, numrows);
     for i := 0 to numrows - 1 do
     begin
       numcols := reader.ReadInteger;
       SetLength(A[i], numcols);
       reader.Read(A[i, 0], numcols * sizeof(A[i, 0]));
     end; { For }
   finally
     reader.Free;
   end; { Finally }
 end;

Перевод контента на русский язык:

Код Delphi предлагает процедуры для сохранения и загрузки двумерного массива boolean в и из потока.

Save2DBooleanArray Процедура Save2DBooleanArray записывает двумерный массив boolean (T2DBooleanArray) в указанный поток (S). Она использует объект TWriter для записи данных. Процедура сначала проверяет, является ли поток-assigned, затем создает объект TWriter с буфером размером 8096 байт.

Процедура записывает длину двумерного массива как целое число, а затем длины каждой строки как целые числа. Затем она записывает каждый boolean-значение в массиве как последовательность байтов (где sizeof(Bool) предполагается равным 1 байт).

Наконец, объект TWriter освобождается.

Load2DBooleanArray Процедура Load2DBooleanArray читает двумерный массив boolean из указанного потока (S). Она использует объект TReader для чтения данных. Процедура сначала проверяет, является ли поток-assigned, затем создает объект TReader с буфером размером 8096 байт.

Процедура читает длину двумерного массива как целое число и использует его для установки длины массива (A). Затем она читает длину каждой строки как целое число и устанавливает длину этой строки. Наконец, она читает каждый boolean-значение в массиве из потока.

Объект TReader освобождается в конце.

Альтернативное решение Альтернативное решение может быть использовать одиночную операцию записи/чтения для всего двумерного массива, без ручной записи/чтения длин каждой строки и значений самих. Это сделает код более эффективным и проще в обслуживании.

Пример:

procedure Save2DBooleanArray(const A: T2DBooleanArray; S: TStream);
var
  writer: TWriter;
begin
  Assert(Assigned(S));
  writer := TWriter.Create(S, 8096);
  try
    writer.Write(A[0], Length(A) * Length(A[0]) * sizeof(Boolean));
  finally
    writer.Free;
  end;
end;

procedure Load2DBooleanArray(var A: T2DBooleanArray; S: TStream);
var
  reader: TReader;
begin
  Assert(Assigned(S));
  reader := TReader.Create(S, 8096);
  try
    SetLength(A, reader.ReadInteger);
    for var i := 0 to Length(A) - 1 do
      begin
        SetLength(A[i], reader.ReadInteger);
        reader.Read(A[i][0], Length(A[i]) * sizeof(Boolean));
      end;
  finally
    reader.Free;
  end;
end;

Код записывает и читает целый двумерный массив одновременно, используя одиночную операцию записи/чтения. Это более эффективно, чем ручная запись/чтение каждой строки и значения.

Появилась статья о сохранении и загрузке двумерного динамического массива в Delphi, содержащая примеры кода для процедур Save2DBooleanArray и Load2DBooleanArray.


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

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




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


:: Главная :: Массивы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:04:02/0.0035989284515381/0