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

Вниз

array   Найти похожие ветки 

 
lehich ©   (2004-05-21 15:46) [0]

как сделать массив строк если не знаешь количества элементов???

array[0..?] of string;


 
Тимохов ©   (2004-05-21 15:47) [1]

использовать динамические масcивы
т.е. array of string


 
lehich ©   (2004-05-21 15:50) [2]

сенкс...


 
ega23 ©   (2004-05-21 15:54) [3]

А лучше почитай про TStrinList


 
lehich ©   (2004-05-21 16:24) [4]

тыкс... еще сразу вопрос, как узнать количество элементов динамического массива???


 
13-Drakosha   (2004-05-21 16:27) [5]

Length(ar)


 
lehich ©   (2004-05-21 16:38) [6]

2ega23 стринглист я думаю больше подойдет для серьезных объемов... у меня же не больше 30-50 значений...


 
ega23 ©   (2004-05-21 16:43) [7]

стринглист я думаю больше подойдет для серьезных объемов... у меня же не больше 30-50 значений...

А какая нафиг разница?
var
List:TStringList;
i:integer;

begin
try
 List:=TStringList.Create;
 List.LoadFromFile(FileName);

 for i:=0 to List.Count-1 do
  begin
    ....
    ....   List.Strings[i]   .....
    ....
  end;

finally
  List.Free;
end;
end;

ИМХО, гораздо проще, чем возюкаться с дин.массивом строк, следить за его длиной и т.п.


 
Sandman25+1   (2004-05-21 16:52) [8]

[6] lehich ©   (21.05.04 16:38)

Динамический массив гораздо быстрее StringList.
Если не нужна функциональность StringList (поиск, сортировка), то Вам следует использовать именно динамический массив.
Следить за очисткой массива не надо, при выходе из процедуры (для локального массива), уничтожении объекта (для массива - члена класса) его очистка произойдет автоматически.


 
lehich ©   (2004-05-21 16:55) [9]

я данные беру не из файла...

while not Query1.Eof do
begin
idfl := Query1.FieldByName("IDFL").AsString;
ListBox1.Items.Add(idfl);
Query1.Next;
end;

вот вместо ListBox1 будет наполнение массива...


 
lehich ©   (2004-05-21 16:56) [10]

2Sandman25+1 несмотря на всю скудность своих познаний в дельфи полностью с Вами согласен...))))


 
Sandman25+1   (2004-05-21 17:04) [11]

[10] lehich ©   (21.05.04 16:56)

Наверное, потому что у меня со знаниями тоже не особо :)
Судя по [9], Вы можете узнать размерность массива заранее (RecordCount+возможно Last), поэтому "умного" выделения памяти a la StringList тут точно не надо.


 
Тимохов ©   (2004-05-21 17:04) [12]


> Динамический массив гораздо быстрее StringList

при условии, что идет моделирование count/capacity.
Если добавлять в массив по одному элементу - stringlist намного быстрее.


 
Sandman25+1   (2004-05-21 17:08) [13]

[12] Тимохов ©   (21.05.04 17:04)

Согласен, я должен был указать, что я не имею в виду корявое использование дин. массива в виде

while ... do
begin
 SetLength(DynArr, Length(DynArr) + 1);
 DynArr[High(DynArr)] := ...
 ...
end;

Тогда точно лучше массивы не использовать :)


 
Palladin ©   (2004-05-21 17:10) [14]


> [12] Тимохов ©   (21.05.04 17:04)
> [11] Sandman25+1   (21.05.04 17:04)

Ответ на вопрос "Чем воспользоватся?" - полностью зависит от условия задачи. Споры о том что же лучше в общем случае не уместны.


 
ega23 ©   (2004-05-21 17:11) [15]

Если не нужна функциональность StringList (поиск, сортировка),

Ключевая фраза!


 
ega23 ©   (2004-05-21 17:12) [16]

Ответ на вопрос "Чем воспользоватся?" - полностью зависит от условия задачи. Споры о том что же лучше в общем случае не уместны.

Золотые слова.


 
Sandman25+1   (2004-05-21 17:18) [17]

[15] ega23 ©   (21.05.04 17:11)

Судя по [9], поиск и сортировка не нужны, иначе бы шла работа с полями DataSet, из которого выгружаются данные :)

[14] Palladin ©   (21.05.04 17:10)

А кто спорит-то? :)


 
lehich ©   (2004-05-21 17:22) [18]

2Sandman25+1 хех... спасибо тебе добрый человек... а почему корявое использование??? ))))))


 
Тимохов ©   (2004-05-21 17:25) [19]


> lehich ©   (21.05.04 17:22) [18]

т.к. добавление 100000 элементов будет работать долго.


 
lehich ©   (2004-05-21 17:27) [20]

яж написал, что 30-50 значений...


 
WebErr ©   (2004-05-21 17:28) [21]


> Тимохов ©   (21.05.04 17:25) [19]

Да пожалуй и двух элементов и то уже долго! :))))


 
Sandman25+1   (2004-05-21 17:30) [22]

[20] lehich ©   (21.05.04 17:27)

Ну так и сделайте сначала SetLength(DynArr, 50);
А при добавлении проверяйте переменную цикла (типа счетчика), и если она больше High(DynArr), то делайте SetLength опять. Причем лучше увеличивать сразу на 10-15 ИМХО (в Вашем случае)


 
lehich ©   (2004-05-21 17:31) [23]

тьфу на вас... запутали вконец... дак что лучше использовать для 30-50 значений???


 
lehich ©   (2004-05-21 17:35) [24]

Sandman25+1   (21.05.04 17:30) [22]
а почему лучше использовать с объемом массива если это необязательный параметр??? прибавляется проверка...


 
Palladin ©   (2004-05-21 17:39) [25]

Что ты дальше со строками делаешь?


 
Sandman25+1   (2004-05-21 17:40) [26]

[24] lehich ©   (21.05.04 17:35)

А Вы думаете, StringList не делает аналогичную проверку? :)

Присоединяюсь к  вопросу [25] Palladin ©   (21.05.04 17:39)


 
lehich ©   (2004-05-21 17:43) [27]

просто последовательно считываю и использую как параметр в sql запросе...


 
Anatoly Podgoretsky ©   (2004-05-21 17:45) [28]

Динамический массив хорош если известно количество элементов которое в него нужно занести, а если количество постоянно колеблется, да еще по одной, то TSringList по оптимальнее будет, или же придется его функциональность дублировать. Кроме того такие дополнительные вещи как сортировка, быстрый поиск и другое многого стоят.


 
lehich ©   (2004-05-21 17:46) [29]

Sandman25+1   (21.05.04 17:40) [26]
дак вот я про это и говорю... может проще и удобнее использовать просто динамический массив без указания его размера???


 
WebErr ©   (2004-05-21 17:47) [30]

В общем сделай

Some = array[0..49] of TSome;

вот они 30-50 значений.


 
Sandman25+1   (2004-05-21 17:47) [31]

[27] lehich ©   (21.05.04 17:43)

Не понял. Какого типа параметр? Неужели SQL понимает динамические массивы Delphi или TStringList?

ИМХО следует вообще отказаться от хранения строк. В цикле идете по DataSet и для каждой записи выполняете запрос, подставляя текущее значение поля. Незачем за два цикла делать то, что можно сделать за один, ИМХО


 
lehich ©   (2004-05-21 18:00) [32]

2Sandman25+1   (21.05.04 17:47) [31]
сорри может я не так выразился, но было сказано, что строки из массива используются в качестве параметра в sql запросе, т.е.:
Query1.SQL.Add("select * from FL");
Query1.SQL.Add("where FAMFL like :Par");

2WebErr ©   (21.05.04 17:47) [30]
хотелось бы сделать что-то поуниверсальнее... а вдруг количество предприятий на человека привысит 50???? ну может же быть... хотя это и исключение...


 
WebErr ©   (2004-05-21 18:05) [33]

IMHO лучше определить количество элементов и юзать динамические array of Тра-та-та; используя SetLength, только тогда, когда будет известно сколько вешать в граммах! ;)


 
lehich ©   (2004-05-21 18:15) [34]

2WebErr данные берутся из базы данных... она постоянно обновляется... т.е. данных может быть намного меньше а может намного больше... поэтому сколько вешать в граммах не известно...)))))


 
panov ©   (2004-05-21 18:37) [35]

>lehich ©   (21.05.04 18:00) [32]

Раз у тебя бурутся данные для формирования запроса, то тебе тогда вообще не надо ни списки, ни массивы использовать.

Добавляй сразу в Query1.SQL

Если все же надо обрабатывать предварительно, то здесь удобнее TStringList ты ничего не найдешь.

После формирования TStringList просто выполняешь Query1.SQL.Assign(MyList);


 
WebErr ©   (2004-05-21 18:42) [36]


> lehich ©   (21.05.04 18:15) [34]

Тогда однозначно TStringList либо TStrings.


 
lehich ©   (2004-05-21 18:52) [37]

2panov если много данных и их нужно проверять в другой таблице, тогда нужно добавлять еще один Query... а по идее это нафиг не нужно... если можно обойтись одним... вообщем освещаю ситуацию подробнее:
1) в одной таблице файла access под названием FL(название таблицы), есть поля IDFL, NAMEFL, FAMFL, OTCHFL... в полях Edit формы вводятся значения для NAMEFL, FAMFL, OTCHFL... и при всех трех совпадениях нужно найти соответствующий IDFL... этих значений может быть несколько... т.е. организаций на одного человека может быть зарегистрировано много...
2) все эти значения пробиваются по другой таблице и при совпадении получаем значение NAMEORG, соответсвующее IDFL...

вот и всё...


 
lehich ©   (2004-05-21 20:26) [38]

але-але-але короткие гудки...))))))


 
Pa5ha   (2004-05-21 20:32) [39]

Во первых хочу красный копурайт. :)
Во вторых вопрос не по теме. А как tList работает? Пользовался, но никогда не задумывался. Это наверно такой же array , только of pointer?


 
panov ©   (2004-05-21 20:34) [40]

>lehich ©   (21.05.04 20:26) [38]
Так у тебя вопрос по БД...

Твоя выборка может одним заросом делаться.

Да и посоветовали ведь уже TStringList.

Работать с ним просто.

var
 tL: TStringList;
 i: Integer;
begin
tL := TStringList.Create;
try

 Query1.First;
 while not Query1.Eof do
 begin
   tL.Add(Query1.FieldByName(...).AsString);
   Query1.Next;
 end;

 for i := 0 to tL.Count-1 do
 begin
// здесь работаешь с tL[i]
 end;
finally
 tL.Free;
end;



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

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

Наверх





Память: 0.54 MB
Время: 0.238 c
14-1085309453
Serious Sam
2004-05-23 14:50
2004.06.06
Где можно продать свою прогу?


14-1084864586
abstr
2004-05-18 11:16
2004.06.06
помгите найти исходник или напишите за $ игру CANNON BLOCKS


14-1085067331
Anarki
2004-05-20 19:35
2004.06.06
Взгляните, LOL


1-1085340678
Alex Friend
2004-05-23 23:31
2004.06.06
Формы в DLL


14-1084962975
ISP
2004-05-19 14:36
2004.06.06
Покупка Delphi. Что брать?





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