powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / TreeView DataWindow
20 сообщений из 20, страница 1 из 1
TreeView DataWindow
    #35441073
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как получить список(массив) уникальных значений столбца в TreeView DataWindow 1-го уровня?
Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string ls_Col
long ll_find, ll_end

ll_end = dw_1.RowCount()
ls_Col = string(dw_1.Object.Data[ 1 ,  1 ])

for ll_find =  1  to ll_end
   ll_find = dw_1.Find("#1 not in ("+ls_Col+")", ll_find, ll_end)
   IF ll_find >  0  THEN
       ls_Col = ls_Col + ", " + string(dw_1.Object.Data[ll_find,  1 ])
   else
       exit
   end if
next
Но думаю, что можно как то проще и чтобы быстрее работало.
Пробовал сделать отфильтровать - не получилось.
Какие есть ещё варианты или как это сделать?
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441173
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом же (во вспомогательном DataWindow предварительно перенеся туда первый столбец), сделать по нему группу и при помощи выражения
Код: plaintext
cumulativeSum(  1  for group  1 )
и фильтра по нему отсеч все дубликаты выражением
Код: plaintext
compute_1 =  1 
и получить столбец с уникальными значениями. С точки зрения быстродействия это будет по-всей видимости неплохо. Как мне кажется просто одними выражениями здесь не обойтись...
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441184
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Спасибо за вариант, идея понятна.
А что Вы скажете, если во вспомогательное DW либо DS сделать выборку из БД сразу набора уникальных значений? Будет ли это быстрее, ведь по сути надо будет повторить почти аналогичный SQL как для dw_1, а он и так был не быстрый? При этом есть ли риск несовпадения результатов?

А есть ли прямое обращение к 1-му столбцу 1-й строки в группе? Или как туда достучаться?
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441218
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
Спасибо за вариант, идея понятна.
А что Вы скажете, если во вспомогательное DW либо DS сделать выборку из БД сразу набора уникальных значений? Будет ли это быстрее, ведь по сути надо будет повторить почти аналогичный SQL как для dw_1, а он и так был не быстрый? При этом есть ли риск несовпадения результатов?
Если делать 2 запроса - то риск получить несовпадения результатов есть (зависит от уровня изоляции транзакций), но я не это имел ввиду. Если в исходном DataWindow уже есть группа, то ее можно временно изменить на группу по 1 столбцу. Или не возиться и перенести данные в отдельное DataWindow либо при помощи RowsCopy либо что-то типа
Код: plaintext
ds.object.data[ 1 , 1 ,n, 1 ] = dw.object.data[ 1 , 1 ,n, 1 ]
AIS
А есть ли прямое обращение к 1-му столбцу 1-й строки в группе? Или как туда достучаться?
Гм, что-то я не понял про что вы тут...
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441323
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЕсли в исходном DataWindow уже есть группа
Насколько я помню, TreeView DW это обычное Group DW, в котором группы отображаются в виде уровней дерева.
Поэтому по идее должна работать ф-я FindGroupChange(row, level), вызывая которую в цикле можно заполнить массив:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ll_breakrow =  0 
DO WHILE True
    ll_breakrow = dw_1.FindGroupChange(ll_breakrow,  1 )
    IF ll_breakrow <=  0  THEN EXIT
    ls_array[Upperbound(ls_array[]) +  1 ] = dw_1.GetItemString(ll_breakrow, "column") 
    ll_breakrow = ll_breakrow +  1 
LOOP

Вот такая вот у меня есть теория. Насколько она соответствует практике, предлагаю выяснить AIS и рассказать нам.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441327
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я весна
Взял это за основу и немного подстроил под себя. Спасибо. Всё работает.
На этом пожалуй и остановлюсь.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441668
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я весна Локшин МаркЕсли в исходном DataWindow уже есть группа
Поэтому по идее должна работать ф-я FindGroupChange(row, level), вызывая которую в цикле можно заполнить массив...
Вот такая вот у меня есть теория. Насколько она соответствует практике, предлагаю выяснить AIS и рассказать нам.
Как мне кажется, мой способ должен работать раз в десять быстрее (минимум), чем на PowerScript'е крутить циклы и вызывать FindGroupChange.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441933
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
...Если в исходном DataWindow уже есть группа, то ее можно временно изменить на группу по 1 столбцу. Или не возиться и перенести данные в отдельное DataWindow либо при помощи RowsCopy либо что-то типа
Код: plaintext
ds.object.data[ 1 , 1 ,n, 1 ] = dw.object.data[ 1 , 1 ,n, 1 ]

...Как мне кажется, мой способ должен работать раз в десять быстрее (минимум), чем на PowerScript'е крутить циклы и вызывать FindGroupChange.
В Вашем варианте всё равно необходимо будет использовать цикл для получения списка уникальных значений 1-го столбца, а может ещё и фильтры и сортировки, плюс создание вспомогательных объектов. Думаю, что это все же будет медленнее работать, чем через FindGroupChange, где всего один цикл и сразу строка списка в результате.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441969
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркКак мне кажется, мой способ должен работать раз в десять быстрее (минимум), чем на PowerScript'е крутить циклы и вызывать FindGroupChange.
А я думаю, что на кол-ве записей до 100тыс, визуально нельзя будет различить :)
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35441978
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
В Вашем варианте всё равно необходимо будет использовать цикл для получения списка уникальных значений 1-го столбца, а может ещё и фильтры и сортировки, плюс создание вспомогательных объектов. Думаю, что это все же будет медленнее работать, чем через FindGroupChange, где всего один цикл и сразу строка списка в результате.
Неа, цикл не нужен.
array = ds.Object.Col[1, rowcount]

Но быстрее не будет, так как внутренне эти два способа используют одни и те же механизмы :)
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442072
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky AIS
В Вашем варианте всё равно необходимо будет использовать цикл для получения списка уникальных значений 1-го столбца, а может ещё и фильтры и сортировки, плюс создание вспомогательных объектов. Думаю, что это все же будет медленнее работать, чем через FindGroupChange, где всего один цикл и сразу строка списка в результате.
Неа, цикл не нужен.
array = ds.Object.Col[1, rowcount]

Но быстрее не будет, так как внутренне эти два способа используют одни и те же механизмы :)
В итоге это будет массив всех значений 1-го столбца, а нужен массив уникальных значений , и не просто массив, а в ввиде строки содержащей список таких значений.
Может в РВ есть функция, которая переводит массив в строку его значений (как например в РНР), то я этого не нашел, поэтому думаю без какого-нибудь цикла не обойтись.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442088
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISВ Вашем варианте всё равно необходимо будет использовать цикл для получения списка уникальных значений 1-го столбца, а может ещё и фильтры и сортировки, плюс создание вспомогательных объектов. Думаю, что это все же будет медленнее работать, чем через FindGroupChange, где всего один цикл и сразу строка списка в результате.
Фильтр по моему условию будет работать быстро, сортировка для FindGroupChange тоже нужна, а список уникальных значений из столбца получается одним присваением.
Anatoly MoskovskyНо быстрее не будет, так как внутренне эти два способа используют одни и те же механизмы :)
Будет, будет. Если действие выражается через несколько вызовов функций - 99% будет гораздо быстрей этих же действий написанных в циклах PowerScript - проверено неоднократно.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442093
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISВ итоге это будет массив всех значений 1-го столбца, а нужен массив уникальных значений , и не просто массив, а в ввиде строки содержащей список таких значений.
Может в РВ есть функция, которая переводит массив в строку его значений (как например в РНР), то я этого не нашел, поэтому думаю без какого-нибудь цикла не обойтись.
Там и будет массив уникальных значений . А извините, в виде строки это Вы сейчас только-что изобразили.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442166
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЕсли действие выражается через несколько вызовов функций - 99% будет гораздо быстрей этих же действий написанных в циклах PowerScript - проверено неоднократно.
Это та ситуация, где как раз тот 1%.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442172
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Локшин МаркЕсли действие выражается через несколько вызовов функций - 99% будет гораздо быстрей этих же действий написанных в циклах PowerScript - проверено неоднократно.
Это та ситуация, где как раз тот 1%.
Что проверяли?
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442200
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Anatoly Moskovsky Локшин МаркЕсли действие выражается через несколько вызовов функций - 99% будет гораздо быстрей этих же действий написанных в циклах PowerScript - проверено неоднократно.
Это та ситуация, где как раз тот 1%.
Что проверяли?
Да :)
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442225
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Там и будет массив уникальных значений. А извините, в виде строки это Вы сейчас только-что изобразили.

Нет не сейчас. Это видно из моего скрипта в самом начале, что на выходе именно строка со списком уникальных значений 1-го столбца. :)
Локшин Марк
Фильтр по моему условию будет работать быстро, сортировка для FindGroupChange тоже нужна, а список уникальных значений из столбца получается одним присваением.

Каким одним присваиванием? Подскажите как.
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442234
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35442855
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Локшин Марк Anatoly Moskovsky Локшин МаркЕсли действие выражается через несколько вызовов функций - 99% будет гораздо быстрей этих же действий написанных в циклах PowerScript - проверено неоднократно.
Это та ситуация, где как раз тот 1%.
Что проверяли?
Да :)
Хм, действительно
...
Рейтинг: 0 / 0
TreeView DataWindow
    #35443129
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Вот.
Это понятно. Я думал, что есть вариант загнать одним присваением массив значений в строку с указанием разделителя, как в других языках.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / TreeView DataWindow
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]