Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
1-41491
P0tia
2003-10-28 15:18
2003.11.13
Значок при перетаскивании


3-40872
rel_
2003-10-21 09:08
2003.11.13
Абсолютное значение


1-41676
Igit
2003-10-24 20:16
2003.11.13
pascal and assembler


6-41827
01001010
2003-09-15 01:15
2003.11.13
резервное копирование


8-41767
DiK
2003-07-07 00:41
2003.11.13
Уменьшить картинку на Image





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский