Текущий архив: 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.47 MB
Время: 0.037 c