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

Вниз

Массивы   Найти похожие ветки 

 
Duke DEE   (2003-05-16 17:19) [0]

У меня такая проблема:
type
TOptions = record
Name: string;
Value: string;
Method: string;
end;

var
T:TStrings;
Opt: TOptions;
i:integer;
begin
for i:=1 to 5 do begin
Opt.Value:="value"+inttostr(i);Opt.Name:="name"+inttostr(i);
T.AddObject("a",Opt); end;
end;


короче мне надо чтото типо T[1].name .... T[2].value....
Но не с TStrings, а с чем то другим, с TStrings не работает!!!!

Если можно, с примером!


 
Skier   (2003-05-16 17:21) [1]


> с TStrings не работает!!!!

И не будет !
А в твоём коде - никогда не будет !


 
Duke DEE   (2003-05-16 17:22) [2]

Да я знаю что это не работает!!! мне надо что то подобное!!! может быть совсем по другому!!!


 
Юрий Федоров   (2003-05-16 17:23) [3]

Type
POptions = ^TOptions;
TOptions = record
Name: string;
Value: string;
Method: string;

var Opt : POptions;

New(Opt);

T.Add("", Pointer(Opt));

POptions(T.Objects[1])^.Value


 
Serginio   (2003-05-16 17:25) [4]

Type POptions=^TOptions;
Opt: POptions;
i:integer;
begin
for i:=1 to 5 do begin
New(Opt); Fillchar(Opt^,SizeOf(TOptions),0);
Opt.Value:="value"+inttostr(i);Opt.Name:="name"+inttostr(i);
T.AddObject("a",Opt); end;
end;



 
Skier   (2003-05-16 17:27) [5]

Господа, хорошо бы ещё T создать. :)


 
Serginio   (2003-05-16 17:34) [6]

Создай динамический массив
type TarOpt=array of TOptions и работай с ним применяя SetLength причем при этой процедуре все значения сразу инициализируются 0 в отличии New а для строк это фатально т.к. компилятор при присвоении новой ссылки на строку пытается уничтожить старую не равную nil


 
Serginio   (2003-05-16 17:37) [7]

(Skier) А чем POptions от TOptions ???? Т создается в стеке а P в общей куче или вообще не создается.


 
Skier   (2003-05-16 17:41) [8]

>Serginio (16.05.03 17:37)
T:TStrings; -> TStrings - это класс ! Причём "абстрактный" !


 
asafr   (2003-05-16 17:42) [9]

а Т, действительно, создать бы не плохо...


 
Serginio   (2003-05-16 17:47) [10]

Ну да самое главное я и просмотрел.
T:TStrings; ещебы сюда добавить T:=Tstrings.Create;
2(0) Используй не TStringList а TList или динамические массивы(Массивы предпочтительнее)
T:TList;

T:=TList.Create;



 
Юрий Федоров   (2003-05-16 17:49) [11]

Я думал, что создание Т подразумавается и опущено для сокращения, хотя глядя на остальной код, в этом возникают сомнения


 
Duke DEE   (2003-05-16 17:55) [12]


> Создай динамический массив
> type TarOpt=array of TOptions и работай с ним применяя SetLength
> причем при этой процедуре все значения сразу инициализируются
> 0 в отличии New а для строк это фатально т.к. компилятор
> при присвоении новой ссылки на строку пытается уничтожить
> старую не равную nil

Поясните Пожалста!!


 
Skier   (2003-05-16 17:59) [13]

>Duke DEE

1)

TOptions = record
Name: string;
Value: string;
Method: string;
end; //TOptions
POptions = ^TOptions;

2) TOptionsList = class(TList)
...................
property Items[Index : Integer] : POptions read Get write Put; default;


 
Serginio   (2003-05-16 18:01) [14]

Type POptions=^TOptions;
T:Tlist;
Opt: POptions;
i:integer;
begin
TList.Create;
for i:=1 to 5 do begin
New(Opt); Fillchar(Opt^,SizeOf(TOptions),0);// обязательно если поля типов (String,array of,IUnknow) тоесть с контролируемым временем жизни
Opt.Value:="value"+inttostr(i);Opt.Name:="name"+inttostr(i);
T.AddObject("a",Opt); end;
end;
Пример динамического массива
t:Array of TOption;
Setlength(t,5);
For i:=Low(t) to High(t) Do Begin

t[i].Value:="value"+inttostr(i);
[i].Name:="name"+inttostr(i);

end;





 
Skier   (2003-05-16 18:03) [15]

>Serginio (16.05.03 18:01)
TList.Create; - надеюсь это опечатка...


 
Serginio   (2003-05-16 18:04) [16]

Ошибочка T.Add(Opt); Но еще раз повторю динамический массив во много раз лучше как по выделению памяти, скорости и контролю жизни. В этом Delphi очень близок к Net


 
Serginio   (2003-05-16 18:06) [17]

А зачем ему TStringLis???


 
Duke DEE   (2003-05-16 18:19) [18]


> Пример динамического массива
> t:Array of TOption;
> Setlength(t,5);
> For i:=Low(t) to High(t) Do Begin
>
> t[i].Value:="value"+inttostr(i);
> [i].Name:="name"+inttostr(i);
>
> end;

Это мне более понятно, спасибо!!! Но как мне быть если я не знаю сколько их будет, Я сделаю 100 а их будет 150!
> t:Array of TOption;
> Setlength(t,5);

Почти тоже что и t:Array [1..5] of Toption;??


 
Serginio   (2003-05-16 18:25) [19]

For i:=0 to n do
Begin
SetLength(t,i+1);
t[i].Value:="value"+inttostr(i);
T[i].Name:="name"+inttostr(i);

end;


 
Duke DEE   (2003-05-16 18:26) [20]

Большое спасибо!


 
Skier   (2003-05-16 18:29) [21]

SetLength(T,n);
For i:=0 to n - 1 do Begin
T[i].Value:="value"+inttostr(i);
T[i].Name:="name"+inttostr(i);
end; //for



 
Serginio   (2003-05-16 18:47) [22]

Всегда проверяй на Length
If i>=Length(t) Then Setlengt(t,i);
Можешь применять как в TList Cappacity и длину. Посмотри исходники TList.



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

Форум: "Основная";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.009 c
4-95176
Sirus
2003-04-01 08:58
2003.05.29
Как открыть форму из DLL немодально???


1-94790
Dyuzhev
2003-05-18 18:54
2003.05.29
структура из Delphi 1


3-94721
lightix
2003-05-08 10:23
2003.05.29
TQuery.OnCalcFields ...


14-95037
miha po
2003-05-08 20:28
2003.05.29
Реклама в shareware версии AdvStringGrid


3-94717
igor
2003-05-05 15:28
2003.05.29
Кодировка в ADO





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский