Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 054

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
Подскажите пожалуйста, как можно сохранить и прочитать многомерный динамический массив??

ar:array of array of integer;

Ham_ele_on Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ham_ele_on (статус: Посетитель)
Вопрос отправлен: 27 февраля 2011, 18:37
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Если массив является матрицей (т.е. он прямоугольный), то вот тебе 2 функции.

type
  TMatrix = array of array of Integer;
 
// Сохранение матрицы X в файл FileName
function SaveMatrixToFile(const X: TMatrix; const FileName: string): Boolean;
var
  Stream: TFileStream;
  RowCount, ColCount, xSize: Cardinal;
begin
  RowCount:= Length(X); // Кол-во строк
  ColCount:= Length(X[0]); // Кол-во стролбцов
  xSize:= RowCount * ColCount * SizeOf(Integer); // Размер матрицы в байтах
 
  try
    Stream:= TFileStream.Create(FileName, fmCreate or fmShareExclusive);
    try
      Stream.Write(RowCount, SizeOf(Cardinal)); // Запись кол-ва строк
      Stream.Write(ColCount, SizeOf(Cardinal)); // Запись кол-ва столбцов
      Stream.Write(X[0, 0], xSize);             // Запись матрицы
    finally
      Stream.Free();
    end;
 
    Result:= True;
  except
    Result:= False;
  end;
end;
 
// Загрузка матрицы X из файла FileName
function LoadMatrixFromFile(var X: TMatrix; const FileName: string): Boolean;
var
  Stream: TFileStream;
  RowCount, ColCount, xSize: Cardinal;
begin
  try
    Stream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
      Stream.Read(RowCount, SizeOf(Cardinal)); // Чтение кол-ва строк
      Stream.Read(ColCount, SizeOf(Cardinal)); // Чтение кол-ва столбцов
      xSize:= RowCount * ColCount * SizeOf(Integer); // Размер матрицы в байтах
      SetLength(X, RowCount, ColCount);              // Выделение памяти
      Stream.Read(X[0, 0], xSize);             // Чтение матрицы
    finally
      Stream.Free();
    end;
 
    Result:= True;
  except
    Result:= False;
  end;
end;
Программа, в которой я отлаживал эти функции, торчит здесь.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 28 февраля 2011, 08:19
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 42; последнее сообщение — 4 марта 2011, 21:55; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2] [3]

min@y™

min@y™ (статус: Доктор наук), 4 марта 2011, 12:45 [#41]:

Цитата (Ham_ele_on):


Length[dinArray,3], 
Length[dinArray[1],2); 
Length[dinArray[2],3); 
Length[dinArray[3],5); // Access violation
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ham_ele_on

Ham_ele_on (статус: Посетитель), 4 марта 2011, 21:55 [#42]:

Всем огромное спасибо за участие!!
разобрали динмассивы "по полочкам".

5 марта 2011, 18:26: Статус вопроса изменён на решённый (изменил автор вопроса — Ham_ele_on)

Страницы: [« Предыдущая] [1] [2] [3]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 02:09
Выполнено за 0.03 сек.