Форум » [x]Harbour » Подскажите алгоритм заполнения таблицы..... » Ответить

Подскажите алгоритм заполнения таблицы.....

Andrey: Всем привет. Как обычно в конце недели голова совсем перестает работать... Имеется массив типа: [more] aDim:={} AADD(aDim,{495, 1}) AADD(aDim,{495, 2}) AADD(aDim,{495, 3}) AADD(aDim,{495, 4}) AADD(aDim,{495, 5}) AADD(aDim,{495, 6}) AADD(aDim,{495, 7}) AADD(aDim,{495, 8}) AADD(aDim,{495, 10}) AADD(aDim,{495, 12}) AADD(aDim,{495, 37}) AADD(aDim,{495, 53}) AADD(aDim,{495, 56}) AADD(aDim,{530, 135}) AADD(aDim,{530, 161}) AADD(aDim,{492, 37}) AADD(aDim,{459, 69}) AADD(aDim,{459, 88}) AADD(aDim,{459, 100}) AADD(aDim,{459, 102}) AADD(aDim,{459, 110}) [/more] Подскажите ПОЖАЛУЙСТА алгоритм печати по 12 столбцов, т.е. нужно сделать ВОТ такой массив : {495, 1,2,3,4,5,6,7,8,10,12,37,53} {495,56 } {530,135,161} {492,37} {459,69,88,100, 102,110}

Ответов - 9

petr707: aDim:=asort(aDim,,,{|x,y| x[1]<=y[1]}) bDIm:={} for i=1 to len(aDim) a:=aDim[i,1] b:=aDim[i,2] n:=ascan(bDim,{|x| x[1]=a}) if n=0 aadd(bDim,{a}) n:=len(bDim) endif if len(bDim[n])>=13 AADD(bDim,{a}) n:=len(bDim) endif AADD(bDim[n],b) next i

Andrey: Не работает... Исходник здесь. FUNCTION MAIN() LOCAL aDim, i, a,b,n,bDim, j aDim:={} AADD(aDim,{495, 1}) AADD(aDim,{495, 2}) AADD(aDim,{495, 3}) AADD(aDim,{495, 4}) AADD(aDim,{495, 5}) AADD(aDim,{495, 6}) AADD(aDim,{495, 7}) AADD(aDim,{495, 8}) AADD(aDim,{495, 10}) AADD(aDim,{495, 12}) AADD(aDim,{495, 37}) AADD(aDim,{495, 53}) AADD(aDim,{495, 56}) AADD(aDim,{530, 135}) AADD(aDim,{530, 161}) AADD(aDim,{492, 37}) AADD(aDim,{459, 69}) AADD(aDim,{459, 88}) AADD(aDim,{459, 100}) AADD(aDim,{459, 102}) AADD(aDim,{459, 110}) aDim:=asort(aDim,,,{|x,y| x[1]<=y[1]}) bDIm:={} for i=1 to len(aDim) a:=aDim[i,1] b:=aDim[i,2] n:=ascan(bDim,{|x| x[1]=a}) if n=0 aadd(bDim,{a}) n:=len(bDim) endif if len(bDim[n])>=13 AADD(bDim,{a}) n:=len(bDim) endif AADD(bDim[n],b) next i // ------ вывод массива ------------- CLEAR SCREEN FOR i:=1 TO LEN(bDim) ? bDim[i,1] FOR j := 2 TO LEN(bDim[1]) ?? bDim[i,j] NEXT NEXT wait RETURN NIL

Петр: Очень нравилось работать с hash FUNCTION MAIN() LOCAL hDim := {=>}, e1, e2 _AADD(hDim,{495, 1}) _AADD(hDim,{495, 2}) _AADD(hDim,{495, 3}) _AADD(hDim,{495, 4}) _AADD(hDim,{495, 5}) _AADD(hDim,{495, 6}) _AADD(hDim,{495, 7}) _AADD(hDim,{495, 8}) _AADD(hDim,{495, 10}) _AADD(hDim,{495, 12}) _AADD(hDim,{495, 37}) _AADD(hDim,{495, 53}) _AADD(hDim,{495, 56}) _AADD(hDim,{530, 135}) _AADD(hDim,{530, 161}) _AADD(hDim,{492, 37}) _AADD(hDim,{459, 69}) _AADD(hDim,{459, 88}) _AADD(hDim,{459, 100}) _AADD(hDim,{459, 102}) _AADD(hDim,{459, 110}) CLEAR SCREEN FOR EACH e1 IN hDim ; ? e1:__enumKey() FOR EACH e2 IN e1:__enumValue() ; ?? e2 IF e2:__enumIndex%12 == 0 ? e1:__enumKey() ENDIF NEXT NEXT WAIT RETURN 0 PROCEDURE _AADD( aHash, aPair ) #define _KEY 1 #define _VALUE 2 IF ! hb_hHaskey( aHash, aPair[_KEY] ) aHash[aPair[_KEY]] := {} ENDIF AADD( aHash[aPair[_KEY]], aPair[_VALUE] ) #undef _KEY #undef _VALUE


Andrey: Петр пишет: Очень нравилось работать с hash Ни разу не работал, кроме ини-файлов... Смотрю и ничего не понимаю... Под Харбором работает, а хХарбор не работает: Error BASE/1005 Class: 'HASHENTRY' has no property: _ENUMKEY Arguments: ( [ 1] = Type: O Val: { HASHENTRY Object }) Error at ...: MAIN(29) in Module: Called from : MAIN(29) in Module: dim_test2.prg Строка 29: FOR EACH e1 IN hDim ; ? e1:__enumKey() Функцию hb_hHaskey() переименовал для хХарбора в hHaskey()

Pasha: У меня еще в прошлом веке, во времена клиппера, было несколько функций для работы с массивами. Во времена харбора я их переписал на С, принципы у них примерно такие, как для хеш. Так их до сих пор их и использую, не стал переделывать свой код под хеш, так привычнее. Наверное, предложу их в репозитарий харбора, не в rtl, так хотя бы в hbmisc. Может быть, кому-нибудь они пригодятся.

Петр: Andrey пишет: Функцию hb_hHaskey() переименовал для хХарбора в hHaskey() Сказали А, говорите и Б FOR EACH e1 IN hDim ? e1:Key FOR EACH e2 IN e1:Value ?? e2 IF hb_enumIndex()%12 == 0 ? e1:Key ENDIF NEXT NEXT Где-то так, у меня нет xhb..

Петр: Pasha пишет: предложу их в репозитарий харбора В SVN или уже в GIT ?

Andrey: Петр пишет: Сказали А, говорите и Б Спасибо БОЛЬШОЕ !

Pasha: Петр пишет: В SVN или уже в GIT ? Пока SVN, на GIT вроде будут переходить после следующего релиза



полная версия страницы