Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Array of Const   Найти похожие ветки 

 
REA ©   (2003-10-28 17:20) [0]

В функцию Format вторым параметром передается Array Of Const и в примере фигурирует примерно следующее [a, "b", "ccc"].
Необходимо сделать этот параметр динамического размера.
Подскажите синтаксис плиз.


 
Skier ©   (2003-10-28 17:22) [1]


> Необходимо сделать этот параметр динамического размера.

Он и так дин. размера
Или я что-то не понимаю...


 
Palladin ©   (2003-10-28 17:25) [2]

:)


 
REA ©   (2003-10-28 17:30) [3]

Пишу что именно не получается:

Var
Args: array of TVarRec;
Begin
SetLength(Args, 1); // Собственно размер, который заранее неизвестен
// Args[0] := TVarRec("Test"); - тут надо как то туда данных напихать. Как?

Format("Test %s", Args);
End;


 
Skier ©   (2003-10-28 17:33) [4]

Format("Test %s", ["Test1", ...,"TestN"]);

Второй параметр Format-а это открытый массив. Элемент этого массива - Variant


 
REA ©   (2003-10-28 17:36) [5]

Чудесно. Как мне создать ["Test1", ...,"TestN"] не зная N ?


 
Skier ©   (2003-10-28 17:38) [6]

>REA © (28.10.03 17:36) [5]
Цель всего этого какая ?


 
REA ©   (2003-10-28 17:44) [7]

Цель (вкратце) имея строку вида "Test %s %s %s" достать данные из некого (виртуального) массива из трех элементов и засунуть в Format в цикле.


 
Малиновский Владимир   (2003-10-28 17:46) [8]

SetLength(Arr, Length(Arr)+1);
Arr[Length(Arr)] := "Значение1"

...

SetLength(Arr, Length(Arr)+1);
Arr[Length(Arr)] := "Значение33"
...

SetLength(Arr, Length(Arr)+1);
Arr[Length(Arr)] := "Значение333"

И так много - много раз.


 
Малиновский Владимир   (2003-10-28 17:48) [9]

Коррекция:

SetLength(Arr, Length(Arr)+1);
Arr[Length(Arr-1)] := "Значение1"

...

SetLength(Arr, Length(Arr)+1);
Arr[Length(Arr-1)] := "Значение33"
...

SetLength(Arr, Length(Arr)+1);
Arr[Length(Arr-1)] := "Значение333"

Т.е. пишем всегда в конец массива.
И так много - много раз.


 
REA ©   (2003-10-28 17:51) [10]

Ну попробуй. "Incompatible types TVarRec and String".
Если попробовать описать Args как Array Of Variant, то "Format cannot be called with this arguments".

И кстати тоже ошибка (вместо Length - High):
Arr[Length(Arr)] := "Значение1"


 
icWasya ©   (2003-10-28 17:59) [11]

начать так же

Var
Args: array of TVarRec;
Begin
SetLength(Args, 3); // Собственно размер, который заранее неизвестен

на теперь самое интересное
with Args[0] do begin
VType := vtAnsiString;
VAnsiString:= "Test";
end;
with Args[1] do begin
VType := vtInteger;
VInteger:= 1024;
end;

with Args[2] do begin
VType := vtExtended;
New(VExtended);
VExtended^:= 3.14159265; (* поскольку для этого типа только указатель, то создадим PExtended и запишем туда.
Сама дельфя практикует ссылку на переменную в стеке *)
end;

а теперь как и раньше

Format("стр %s инт %d Ext %10.6f", Args);

... не забыть удалить то, что насоздавали(Extended)

End;


 
REA ©   (2003-10-28 18:05) [12]

Примерно так и предполагал.
А функции нету Variant -> TVarRec?
Видимо придется под строки место выделять и потом удалять, но это проще.


 
MBo ©   (2003-10-28 18:21) [13]

http://rvelthuis.bei.t-online.de/articles/articles-openarr.htm


 
REA ©   (2003-10-29 15:00) [14]

Thanx. Некоторые места, особенно про reference counting весьма любопытны.



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
3-40933
stud
2003-10-17 11:39
2003.11.13
события в файрберд


1-41728
Bart
2003-11-03 13:49
2003.11.13
Kylix3 проблема с .so


1-41559
d_oleg
2003-10-27 18:00
2003.11.13
определить путь в каталог пользователя под win200/XP


1-41537
Brenton
2003-10-28 04:52
2003.11.13
Проблема с копированием файлов... помогите пожалуйста


14-42091
Nick Denry
2003-10-19 15:17
2003.11.13
Любознательность №1.