![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длина массива записей -- как??? [D7, WinXP]
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)
а это вообще не будет скомпилировано