Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длина массива записей -- как??? [D7, WinXP]


Страницы:   1 2 3 4

cvg ©   (2004-08-04 16:38:00) 

Hi, masters! Как можно найти длину массива записей (или как оно там по-умному называется?) Структурка такая:

type MyRec =
record
 name:string[10];
 ar0:integer;
 ar1:double;
 ar2:double;
 ar3:double;
 ar4:double;
 ar5:double;
end;
MyArr = array of MyRec;

Length(A) не работает... Ж:(((


cvg   (2004-08-04 17:13:00) [41]

Удалено модератором


cvg   (2004-08-04 17:13:00) [42]

Седьмая.


MacroDenS   (2004-08-04 17:11:00) [43]

а у тебя делфа какая?
в Д6 все работает нормально!


cvg   (2004-08-04 17:09:00) [44]

У меня в WatchList'е пишет: length(a): Inaccessible value.


Digitman   (2004-08-04 17:07:00) [45]

осталось только выяснить, что подразумевал автор под

> или как оно там по-умному называется


то ли число эл-тов дин.массива, то ли полный объем памяти в байтах, занимаемых дин.массивом в некий момент времени


MacroDenS   (2004-08-04 17:03:00) [46]

to Anatoly Podgoretsky ©
sorri, за невнимательность...
строку MyArr = array of MyRec;воспринял как MyArr : array of MyRec;

а в целом для автора

Length(A) не работает... Ж:(((

вообще нормально работает!


WondeRu   (2004-08-04 17:02:00) [47]

cvg   (04.08.04 16:53) [9]
потому что размер указателя на массив = 4


П7   (2004-08-04 17:02:00) [48]

Тупилки очередные устроили... (:


Digitman   (2004-08-04 17:02:00) [49]


> MacroDenS ©   (04.08.04 16:59) [15]


так ведь код-то у тебя совершенно иной !


Anatoly Podgoretsky   (2004-08-04 17:01:00) [50]

Где Length(MyArr) зачем было обманывать?


MacroDenS   (2004-08-04 16:59:00) [51]

да ладно, че вы гоните, вот код:

unit Unit1;

interface

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

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

type MyRec = record
name:string[10];
ar0:integer;
ar1:double;
ar2:double;
ar3:double;
ar4:double;
ar5:double;
end;
MyArr = array of MyRec;

var
 Form1: TForm1;
 a:MyArr;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(IntToStr(length(A)));
end;

end.


который нормально компилиться, и естественно, при нажатии на button1 выскакивает сообщение 0.
а если сделать,

setlength(a, length(a)+1)

то при повторном нажатии на кнопку мессага выкинет количество записей в массиве.


Digitman   (2004-08-04 16:56:00) [52]


> cvg   (04.08.04 16:53) [9]


если ведешь речь именно о длине одномерного дин.массива, то именно Length() возвращает эту длину (т.е. число элементов в этом массиве)


П7   (2004-08-04 16:54:00) [53]

Да ну, ты гонишь! Length вернёт количество этих записей в массиве.
А ещё можно сделать так:

var
 MyArr = array of MyRec;
 MyRecCount : integer;
function AddMyRec( MyR : MyRec ) : integer;
begin
 Result := MyRecCount;
 inc( MyRecCount );
 SetLength( MyArr, MyRecCount );
end;

Собственно MyRecCount у тебя будет размером массива.

А SizeOf( MyArr ) вроде как не сработает, т.к. массив у тебя динамический. А если и сработает, то полученное значение придётся делить на SizeOf( MyRec ), чтобы из общего размера данных выделить количество блоков "весом", равным твоей записи.


Sandman25   (2004-08-04 16:54:00) [54]

>Что делать будем?

Может, книжки почитаем? Или хотя бы help из Delphi?


Anatoly Podgoretsky   (2004-08-04 16:54:00) [55]

MacroDenS ©   (04.08.04 16:51) [8]
Код в студию, правда этот код смысла не имеет.


Digitman   (2004-08-04 16:54:00) [56]


> MacroDenS ©   (04.08.04 16:51) [8]


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


cvg   (2004-08-04 16:53:00) [57]

Ну я тут на радостях проверил sizeof. Результат: выдает 4 вне завистимости от еол-ва записей. Что делать будем?


MacroDenS   (2004-08-04 16:51:00) [58]

> Length(MyArr)
>а это вообще не будет скомпилировано

Странно, но у меня нормально компилиться...


Anatoly Podgoretsky   (2004-08-04 16:50:00) [59]

Aдолжно быть типа MyArr


Digitman   (2004-08-04 16:50:00) [60]


> MacroDenS


и что это будет, по-твоему ?


> Length(MyArr)


а это вообще не будет скомпилировано


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо