|
Вопрос # 5 054/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
Подскажите пожалуйста, как можно сохранить и прочитать многомерный динамический массив??
ar:array of array of integer;
 |
Вопрос задал: 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™ (статус: Доктор наук), 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 (статус: Посетитель), 4 марта 2011, 21:55 [#42]:
Всем огромное спасибо за участие!!
разобрали динмассивы "по полочкам".
|
5 марта 2011, 18:26: Статус вопроса изменён на решённый (изменил автор вопроса — Ham_ele_on)
Страницы: [« Предыдущая] [1] [2] [3]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|