Форум: "Основная";
Текущий архив: 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;
← →
lehich © (2004-05-21 20:51) [41]2panov если честно нифига не понял из того, что написал... если не сложно можно поподробнее и с комментариями...
P.S. оттдавая дань своей дельфовой безграмотности....(((((
← →
Sandman25+1 (2004-05-24 09:53) [42]lehich
Посомтрите Locate. Возможно, вам подойдет Query2.Locate("namfl;famfl;otchfl", VarArrayOf[edNam.Text, edFam.Text, edOtch.Text], [loCaseInsensitive]) и затем использование Query2idfl
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.037 c