Вверх ↑
Этот топик читают: Гость
Ответов: 70
Рейтинг: 1
#1: 2016-02-20 18:01:35 ЛС | профиль | цитата
Здравствуйте!
Не смог побороть ни StringTable ни StringTableMT ни MTStrTbl - либо не доглядел.
Есть таблица учеников всей школы. В школе прошла олимпиада. Все результаты из таблицы импортированы в HiAsm, теперь ведется сортировка. Сначала по классам, потом по баллам.
Чтобы получилось что-то типа

Класс     Имя ученика          Балл
1            Ученик #4            94
1            Ученик #8            93
1            Ученик #1            90
1            Ученик #2            85
1            Ученик #5            80
1            Ученик #6            79
1            Ученик #3            74
1            Ученик #7            74
2            Ученик #1            99
2            Ученик #8            97
2            Ученик #6            94
2            Ученик #9            93
2            Ученик #2            90
2            Ученик #3            89
2            Ученик #5            85
2            Ученик #7            83
2            Ученик #4            80
3            Ученик #8            95
3            Ученик #7            94
3            Ученик #4            94
3            Ученик #1            92
3            Ученик #2            90
3            Ученик #3            89
3            Ученик #6            89
3            Ученик #5            85
В HiAsm удаётся провести только одну сортировку либо по балам, либо по классам. Как осуществить задумку?
карма: 0

0
Ответов: 2059
Рейтинг: 132
#2: 2016-02-20 18:46:32 ЛС | профиль | цитата
MBTY,
Я-бы так делал:
1. Выделить из списка один класс и отсортировать по балам.
2. Добавить полученный список во второй вспомогательный список(изначально пустой).
3. Выделить следующий класс и отсортировать.
4. Добавить в конец имеющегося списка.
и т.д.
5. Вывести список в таблице.
Т.е. сортировать только один класс отдельно.
карма: 6

0
Ответов: 70
Рейтинг: 1
#3: 2016-02-20 19:04:09 ЛС | профиль | цитата
flint2, вероятно, что к тому и прийду, просто не верю, что есть три вида таблиц в HiAsm (помимо SQL и т.п.) и нет такой функции. Явно я чего то не вижу
карма: 0

0
Ответов: 2059
Рейтинг: 132
#4: 2016-02-20 19:23:07 ЛС | профиль | цитата
MBTY,
В таблице сортировка только по одному столбцу - по определению. Надо подумать, как сделать сортировку по выделенным строкам.
Ещё вариант - если это дело запихнуть в базу, то можно делать выборку по нужным критериям и заполнять таблицу построчно.
карма: 6

0
Ответов: 8926
Рейтинг: 823
#5: 2016-02-20 19:53:26 ЛС | профиль | цитата
flint2, "Что тут думать, прыгать надо!"
code_36963.txt
карма: 19

0
файлы: 1code_36963.txt [2.4KB] [509]
Ответов: 2059
Рейтинг: 132
#6: 2016-02-20 20:02:43 ЛС | профиль | цитата
Леонид,
[flood]
прыгать надо!

Не могу. Все руки в свёкле. - борщ делаю.
Всю клаву разукрасил.
[/flood]
карма: 6

0
Ответов: 16884
Рейтинг: 1239
#7: 2016-02-20 21:36:14 ЛС | профиль | цитата
MBTY писал(а):
Сначала по классам, потом по баллам.
Причем по баллам - от большего к меньшему (обратная сортировка)
Леонид писал(а):
"Что тут думать, прыгать надо!"
Думать тоже
Удалено. Потому, что не подумал. Исправленная схема ниже.
------------ Дoбавленo в 21.36:
MBTY писал(а):
Все результаты из таблицы импортированы в HiAsm
Вот это и нужно было выложить.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#8: 2016-02-20 21:50:16 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 07:49:48
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#9: 2016-02-20 21:53:18 ЛС | профиль | цитата
Блин! 10 учеников потерял (по одному из каждого класса)
Исправлено
Add(MainForm,5499923,70,91)
{
Width=496
Height=432
link(onCreate,6444768:doFor,[])
}
Add(StringTable,8266939,371,105)
{
@Hint=#21:Сортировка по классам|
Left=5
Top=5
Width=225
Height=295
Columns=#8:Класс=40|14:Имя ученика=80|7:Балл=50|
ColumnClick=1
Point(Strings)
Point(onColumnClick)
Point(doSortDigit)
AddHint(-19,-38,137,13,@Hint)
}
Add(StringTable,4246445,735,252)
{
Left=235
Top=5
Width=235
Height=295
Columns=#8:Класс=40|14:Имя ученика=80|7:Балл=50|
}
Add(FormatStr,5353700,322,91)
{
DataCount=3
Mask="%1;Ученик #%2;%3"
link(onFString,8266939:doAdd,[(362,97)(362,111)])
link(Str1,8149795:Random,[(328,81)(315,81)(315,138)(188,138)])
link(Str2,16106170:Random,[(335,75)(307,75)(307,131)(230,131)])
}
Add(Random,16106170,224,91)
{
Min=1
Max=30
link(onRandom,3308923:doRandom,[])
}
Add(Random,3308923,266,91)
{
Min=45
link(onRandom,5353700:doString,[])
}
Add(Random,8149795,182,91)
{
Min=1
Max=10
link(onRandom,16106170:doRandom,[])
}
Add(For,6444768,133,105)
{
End=199
link(onEvent,8149795:doRandom,[(173,111)(173,97)])
link(onStop,5771575:doEvent1,[(172,118)(172,146)])
}
Add(DoData,6492976,322,140)
{
Data=Integer(0)
link(onEventData,8266939:doSortDigit,[])
}
Add(Hub,5771575,259,140)
{
OutCount=3
link(onEvent1,6492976:doData,[])
link(onEvent2,3075955:doWork2,[])
link(onEvent3,3663873:doEnum,[(291,160)(291,181)])
}
Add(MultiStrData,8626986,434,175)
{
link(onPart1,4851895:doData,[])
}
Add(DoData,10736319,595,217)
{
Data=Integer(2)
link(onEventData,15320644:doSortDigit,[])
}
Add(ChangeMon,4851895,483,175)
{
Data=Integer(1)
Point(onNoData)
link(onData,14990067:doEvent1,[(531,181)(531,223)])
link(onNoData,1016712:doWork2,[])
}
Add(Hub,14990067,546,217)
{
InCount=2
OutCount=3
link(onEvent1,10736319:doData,[])
link(onEvent2,9960467:doEnum,[(582,230)(582,258)])
link(onEvent3,1016712:doWork3,[(571,237)])
}
Add(ArrayEnum,9960467,658,252)
{
Type=1
link(onItem,4246445:doAdd,[])
link(onEndEnum,3075955:doWork3,[(706,265)(706,153)])
link(Array,15320644:Strings,[])
}
Add(HubEx,3075955,622,147)
{
Angle=1
link(onEvent,15320644:doClear,[(626,195)])
}
Add(StringTable,15320644,644,182)
{
@Hint=#30:Обратная сортировка по баллам.|
Width=0
Height=0
Visible=1
Columns=#1:1|1:2|1:3|
Point(doSortDigit)
Point(Strings)
link(Str,3663873:Item,[(650,163)(472,163)(472,218)(391,218)])
AddHint(-78,-57,185,13,@Hint)
}
Add(HubEx,1016712,567,182)
{
link(onEvent,15320644:doAdd,[])
}
Add(ArrayEnum,3663873,385,175)
{
link(onItem,8626986:doSplit,[])
link(onEndEnum,14990067:doEvent2,[(428,188)(428,230)])
link(Array,8266939:Strings,[])
}

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2059
Рейтинг: 132
#10: 2016-02-21 01:22:32 ЛС | профиль | цитата
[flood]Наконец то добрался.[/flood]
Когда не выбран массив строк, то сортировка по столбцу в левой таблице.
Когда выбрано несколько строк, то сортируется по выбранному столбцу и переносится в правую таблицу. (сделано по убыванию - для баллов).
Add(MainForm,2953706,357,287)
{
Width=787
Height=627
link(onCreate,790530:doEnum,[])
}
Add(StrList,2732518,441,126)
{
Strings=#16:3; Ученик #2; 90|16:1; Ученик #8; 93|16:2; Ученик #6; 94|16:1; Ученик #1; 90|16:1; Ученик #2; 85|16:3; Ученик #3; 89|16:1; Ученик #6; 79|16:1; Ученик #7; 74|16:3; Ученик #7; 94|16:2; Ученик #8; 97|16:2; Ученик #9; 93|16:2; Ученик #2; 90|16:2; Ученик #3; 89|16:2; Ученик #5; 85|16:1; Ученик #3; 74|16:2; Ученик #7; 83|16:2; Ученик #4; 80|16:3; Ученик #8; 95|16:1; Ученик #5; 80|16:3; Ученик #4; 94|16:3; Ученик #1; 92|16:2; Ученик #1; 99|16:3; Ученик #6; 89|16:1; Ученик #4; 94|16:3; Ученик #5; 85|
}
Add(ArrayEnum,790530,455,301)
{
link(onItem,9631054:doMTString,[])
link(Array,2732518:Array,[])
}
Add(MT_String,9631054,511,287)
{
link(onResult,6788460:doRowAction,[])
}
Add(MST_RowAction,6788460,567,287)
{
MSTControl="lll"
}
Add(MTStrTbl,14130833,637,287)
{
Left=10
Top=5
Width=385
Height=365
Name="lll"
Columns=#5:Класс|11:Имя ученика|4:Балл|
ColumnClick=1
Redaction=0
MultiSelect=0
link(onColumnClick,7270494:doValue,[])
}
Add(MST_Selected,1404927,532,336)
{
MSTControl="lll"
Point(SelCount)
}
Add(MST_ArrayRows,3293888,644,385)
{
MSTControl="lll"
}
Add(MT_MTArrayRW,7022694,644,441)
{
link(onRead,4264146:doRowAction,[])
link(Array,3293888:Strings,[])
link(Index,5316292:Index,[(657,429)(601,429)(601,478)(545,478)])
}
Add(ArrayEnum,5316292,532,434)
{
link(onItem,8842106:doCase,[])
link(onEndEnum,1940395:doData,[(572,447)(572,510)])
link(Array,1404927:SelectArray,[])
}
Add(Case,8842106,581,434)
{
Value=Integer(1)
link(onTrue,7022694:doRead,[])
}
Add(MTStrTbl,4881026,764,441)
{
@Color=16755370
Left=405
Top=115
Width=360
Height=210
Name="tab_2"
Columns=#5:Класс|11:Имя ученика|4:Балл|
MultiSelect=0
}
Add(MST_RowAction,4264146,693,441)
{
@Color=16755370
MSTControl="tab_2"
}
Add(MST_SortInCol,1938432,721,504)
{
@Color=16755370
MethodSort=1
MSTControl="tab_2"
}
Add(Memory,7270494,756,294)
{
link(onData,9654373:doCompare,[(800,300)(800,332)(702,332)(702,363)])
}
Add(DoData,1940395,588,504)
{
link(onEventData,1938432:doSort,[])
link(Data,7270494:Value,[(594,412)(762,412)])
}
Add(MST_Clear,12299871,476,434)
{
@Color=16755370
MSTControl="tab_2"
link(onChange,5316292:doEnum,[])
}
Add(MST_SortInCol,4681644,784,364)
{
MSTControl="lll"
}
Add(If_else,9654373,714,357)
{
Type=2
Op2=Integer(1)
link(onTrue,12299871:doClear,[(758,363)(758,401)(464,401)(464,440)])
link(onFalse,4681644:doSort,[])
link(Op1,1404927:SelCount,[(720,345)(667,345)(667,380)(552,380)])
}


карма: 6

0
файлы: 1code_36964.txt [2.8KB] [426]
Гость
Ответов: 17029
Рейтинг: 0
#11: 2016-02-21 01:49:16 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 07:49:48
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2016-02-21 09:16:13 ЛС | профиль | цитата
37.212.210.132, отлично, но один маленький нюанс :
37_212_210_132.png
То же на StringTable :
code_36969.txt


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 237_212_210_132.png [58.7KB] [666], code_36969.txt [1.7KB] [294]
Гость
Ответов: 17029
Рейтинг: 0
#13: 2016-02-21 10:05:17 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 07:49:48
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#14: 2016-02-21 11:18:53 ЛС | профиль | цитата
И используя SQLite:
code_36971.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_36971.txt [13KB] [848]
Ответов: 70
Рейтинг: 1
#15: 2016-02-21 22:30:41 ЛС | профиль | цитата
Спасибо всем, кто откликнулся.
Tad, вы просили выложить мои данные - не имею права, сами понимаете, личная информация, законы о неразглашении - в общем никак нельзя.
Догадывался, что база SQLite при верных запросах всё бы сделала за меня, но я не знаю SQL, что затормозит развитие моего поделия в дальнейшем.
Остановился мой проект на таблицах семейства MST, в которой можно провести сначала одну сортировку, затем другую, затем третью и т.д. и таблица не рушится, но моя ошибка заключалась в том, что я сортировал баллы через DoSort и потому баллы шли примерно так (по убыванию) 95,94,93,92,91,90,9,89........83,82,81,80,8,79,78...... и т.д. Замена DoSort на DoSortDigit расставила всю таблицу верно. Не разглядел сразу в большом объеме данных
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)