Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись/чтение массива, как хранить n-мерный массив? 
:(
    Опции темы
And_
Дата 30.3.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Добрый день!
Подскажите, пожалуйста, как реализовать хранение в файле содержимого многомерного массива?
Необходимо что бы при чтении такого файла устанавливалась размерность массива-приемника.
 smile 
PM MAIL   Вверх
Alexeis
Дата 30.3.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



перед записью элементов записать все 3 его размера, затем последовательно все элементы. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
And_
Дата 30.3.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



У меня проблема с реализацией чтения/записи.
Хотелось бы посмотреть на пример кода, который это выполняет.
PM MAIL   Вверх
Alexeis
Дата 30.3.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(And_ @  30.3.2009,  12:30 Найти цитируемый пост)
Хотелось бы посмотреть на пример кода, который это выполняет. 

  Это зависит от типа массива. Статические и динамические массивы пишутся по-разному.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
And_
Дата 30.3.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Нужно записать терхмерный динамический массив типа double.
Пробую таким макаром:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type TD3Array = array of array of array of Double;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation



{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArray: TD3Array;
  MyFileStream: TFileStream;
  i: Integer;
  j: Integer;
  k: Integer;
begin
  SetLength(MyArray,3,5,10);
  randomize;

  for i := 0 to Length(MyArray) - 1 do
    for j := 0 to Length(MyArray[i]) - 1 do
      for k := 0 to Length(MyArray[i][j]) - 1 do
        MyArray[i][j][k] := Random(10)/100;

  try
     MyFileStream := TFileStream.Create('c:\blabla.dat',fmOpenReadWrite);
   except
     MyFileStream := TFileStream.Create('c:\blabla.dat',fmCreate);
   end;

  MyFileStream.WriteBuffer(MyArray,SizeOf(TD3Array));
  MyFileStream.Free;


end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyArray: TD3Array;
  MyFileStream: TFileStream;
  str: string;

begin
 // SetLength(MyArray,3,5,10);
  try
    MyFileStream := TFileStream.Create('c:\blabla.dat', fmOpenRead);
   except
     ShowMessage('Ошибка!');
     Exit;
   end;
    str := 'Размер первого измерения: ' + IntToStr(Length(MyArray));
    ShowMessage(str);
    MyFileStream.ReadBuffer(MyArray, SizeOf(TD3Array));
    MyFileStream.Free;
    str := 'Размер первого измерения: ' + IntToStr(Length(MyArray));
    ShowMessage(str);
end;

end.





Это сообщение отредактировал(а) And_ - 30.3.2009, 13:46
PM MAIL   Вверх
Alexeis
Дата 30.3.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Начнем с того что
Код

MyFileStream.WriteBuffer(MyArray,SizeOf(TD3Array));

Запишет значение указателя, а SizeOf(TD3Array) 4 байта.

записывать за раз можно только одну размерность следующим образом.
Код

MyFileStream.WriteBuffer(MyArray[i, j][0], SizeOf(Double) * length(MyArray[i, j]);

Поскольку если более одного измерения, то такие массивы строятся как массивы указателей, и непрерывным блоком является только линейный массив.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Frees
Дата 30.3.2009, 15:01 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(And_ @  30.3.2009,  15:30 Найти цитируемый пост)
Хотелось бы посмотреть на пример кода, который это выполняет.

это можно понимать как - "сделайте за меня мне лень думать!"


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1143 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.