Вверх ↑
Этот топик читают: Гость
Ответов: 54
Рейтинг: 0
#1: 2014-07-15 07:17:57 ЛС | профиль | цитата
Добрый день.
Столкнулся с проблемой. Есть список строк где ID строки является 1 символ (последующие символы всегда разные), к примеру:

1
2
3
4
4
4
6
2
2
3
4
5
6
Тут 2 блока 1,2,3,4,4,4,6 и 2,2,3,4,5,6. Т.е. каждый блок начинается с минимальной цифры, но может быть несколько строк с одной и той же цифрой. Собственно вопрос, как можно реализовать?
карма: 0

0
Ответов: 1058
Рейтинг: 76
#2: 2014-07-15 08:30:33 ЛС | профиль | цитата
Неполное описание проблемы...
Длина блоков разная?
Wizdoom писал(а):
каждый блок начинается с минимальной цифры

Минимальная цифра следующего блока меньше последней цифры из предыдущего блока?
Wizdoom писал(а):
Есть список строк

Список откуда берется? Ваша прога выдает, или сторонняя?
карма: 0

0
Ответов: 54
Рейтинг: 0
#3: 2014-07-15 08:47:04 ЛС | профиль | цитата
Суммарное значение символов в блоке всегда одинаковое.

Минимальная цифра следующего блока меньше последней цифры из предыдущего блока?

-да

Список откуда берется? Ваша прога выдает, или сторонняя?

-источник обычный TXT фаил
карма: 0

0
Ответов: 1058
Рейтинг: 76
#4: 2014-07-15 09:32:49 ЛС | профиль | цитата
Wizdoom писал(а):
Суммарное значение символов в блоке всегда одинаковое.

Что подразумевается под "суммарное" ? Количество символов, или сумма чисел одного блока?
Я имел ввиду длину, то есть каждый блок состоит из одинакового или разного числа символов.
Wizdoom писал(а):
источник обычный TXT фаил

Имелось ввиду - генерация файла. Также если программа ваша(на HiAsm) можно на этапе создания списка помещать разделители блоков и т.п.


Add(MainForm,2953706,189,126)
{
link(onCreate,13413011:doEnum,[])
}
Add(Memo,14166479,266,42)
{
Left=20
Top=10
Width=100
Height=220
Strings=#1:1|1:2|1:3|1:4|1:4|1:4|1:6|1:2|1:2|1:3|1:4|1:5|1:6|1:1|1:2|1:3|1:4|1:4|1:4|1:6|1:2|1:2|1:3|1:4|1:5|1:6|
ScrollBars=3
}
Add(ArrayEnum,13413011,266,140)
{
link(onItem,6431399:doCompare,[])
link(onEndEnum,3917376:doWork1,[(314,153)(314,221)(578,221)])
link(Array,14166479:Array,[(272,114)(286,114)])
}
Add(Memory,6606094,350,77)
{
}
Add(If_else,6431399,343,140)
{
Type=4
link(onTrue,4162765:doEvent1,[])
link(onFalse,6190916:doEvent1,[(383,153)(383,181)])
link(Op2,6606094:Value,[])
}
Add(StrCat,4910250,476,140)
{
Point(doClear)
link(Str1,13240099:Var2,[])
}
Add(Hub,4162765,406,140)
{
InCount=2
link(onEvent1,4910250:doStrCat,[])
link(onEvent2,6606094:doValue,[(434,153)(434,68)(329,68)(329,83)])
}
Add(Memo,5508061,609,175)
{
Left=200
Top=10
Width=155
Height=210
link(Str,13240099:Var3,[(615,128)])
}
Add(GetDataEx,13240099,476,123)
{
Angle=3
link(Data,4910250:Result,[(470,128)(470,184)(482,184)])
}
Add(Hub,6190916,406,175)
{
OutCount=3
link(onEvent1,3917376:doWork2,[])
link(onEvent2,4910250:doClear,[(448,188)(448,153)])
link(onEvent3,4162765:doEvent2,[(430,195)(430,209)(394,209)(394,153)])
}
Add(HubEx,3917376,574,175)
{
link(onEvent,5508061:doAdd,[])
}
карма: 0

0
Ответов: 54
Рейтинг: 0
#5: 2014-07-15 10:11:19 ЛС | профиль | цитата
Что подразумевается под "суммарное" ? Количество символов, или сумма чисел одного блока?

В каждом блоке всегда одинаковое количество символов.
карма: 0

0
Ответов: 1058
Рейтинг: 76
#6: 2014-07-15 11:21:53 ЛС | профиль | цитата
code_33999.txt
карма: 0

0
файлы: 1code_33999.txt [1.1KB] [162]
Ответов: 824
Рейтинг: 138
#7: 2014-07-15 13:31:02 ЛС | профиль | цитата
code_34000.txt
карма: 1

1
файлы: 1code_34000.txt [1.5KB] [263]
Голосовали:miver
Ответов: 54
Рейтинг: 0
#8: 2014-07-20 23:35:15 ЛС | профиль | цитата
Спасибо большое за ответы!

Под разобравшись ещё с записями в файле, нашел ещё 1 закономерность.
К примеру:

20000018769869
20000018779232
20000018764861
20000018789860
20000028729166
20000028761863
20000028763864
20000028766165
20000028764467
20000028765867

из чего следует, что со 2 по 7 цифру включительно, это ID запись. Так же, количество символов в блоке не одинаковое.

Вопрос теперь заключается в том, как разделить строки на блоки типа

20000018769869
20000018779232
20000018764861
20000018789860

и

20000028729166
20000028761863
20000028763864
20000028766165
20000028764467
20000028765867

(т.е. что бы каждая строка с одинаковым ID записывалась в блок, и этот блок выдавался в поток)
карма: 0

0
Ответов: 327
Рейтинг: 5
#9: 2014-07-25 10:35:48 ЛС | профиль | цитата
Такие люди как "Galkov", "Tad" и прочие из компании заядлых пользователей HiAsm'а наверняка предложат более изящное решение, но мой вариант вроде как работает без ошибок
Add(MainForm,2953706,98,182)
{
link(onCreate,13713722:doEnum,[])
}
Add(StrList,10238639,175,98)
{
Strings=#14:20000018769869|14:20000018779232|14:20000018764861|14:20000018789860|14:20000028729166|14:20000028761863|14:20000028763864|14:20000028766165|14:20000028764467|14:20000028765867|
}
Add(ArrayEnum,13713722,161,196)
{
link(onItem,2143182:doEvent1,[])
link(Array,10238639:Array,[(167,170)(195,170)])
}
Add(StrMask,10868328,273,203)
{
Point(doMask)
link(onFalse,3642207:doEvent1,[])
link(onTrue,8979480:In,[(324,216)(324,258)])
}
Add(Memo,11358491,644,203)
{
Width=384
Height=262
Align=5
ScrollBars=3
}
Add(Hub,3642207,329,203)
{
link(onEvent1,14128926:doData,[])
link(onEvent2,10995039:doEnum,[])
}
Add(Str_Enum,10995039,357,210)
{
Delimiter=""
To=7
link(onEnum,8446811:doStrCat,[])
link(onEndEnum,9928688:doStrCat,[(395,223)(395,279)])
}
Add(StrCat,8446811,441,210)
{
Point(doClear)
link(Str1,12475163:Var1,[(447,198)(435,198)(435,254)])
}
Add(Hub,2143182,203,196)
{
link(onEvent1,7797406:In,[])
link(onEvent2,10868328:doCompare,[])
}
Add(LineBreak,16167829,399,217)
{
link(Out,8446811:doClear,[])
Primary=[7797406,-168,-21]
}
Add(DoData,7639772,581,217)
{
link(onEventData,13241219:doWork3,[(627,223)])
link(Data,5632682:Var,[])
}
Add(HubEx,13241219,623,203)
{
link(onEvent,11358491:doAdd,[])
}
Add(LineBreak,6635944,539,217)
{
link(Out,7639772:doData,[])
Primary=[8979480,-182,35]
}
Add(LineBreak,6924730,161,238)
{
Type=1
link(Data,13713722:Item,[])
Primary=[5632682,420,-49]
}
Add(DoData,14128926,532,203)
{
link(onEventData,13241219:doWork2,[])
}
Add(LineBreak,9356050,238,210)
{
link(Out,10868328:doMask,[])
Primary=[4738163,245,63]
}
Add(StrCat,9928688,441,273)
{
Str2="*"
link(onStrCat,4738163:In,[])
link(Str1,12475163:Var2,[])
}
Add(GetDataEx,12475163,441,249)
{
link(Data,8446811:Result,[])
}



------------ Дoбавленo в 10.35:
а почему бы не использовать символ-разделитель?(если конечно это твоя программа генерирует эти строки)
например вместо "20000018769869" будет "2000001;8769869"
тогда становится еще проще разделять
карма: 0

0
Ответов: 8926
Рейтинг: 823
#10: 2014-07-25 11:47:00 ЛС | профиль | цитата
knoot0279 писал(а):
..как "Galkov", "Tad" и прочие..
Я прочий, Я! code_34048.txt
карма: 19

0
файлы: 1code_34048.txt [3.6KB] [196]
Ответов: 327
Рейтинг: 5
#11: 2014-07-25 12:10:39 ЛС | профиль | цитата
Леонид, ты без сомнений входишь в разряд "прочие", но схема твоя не рабочая
------------ Дoбавленo в 11.50:
и еще, объясни... ка кой черт там rnd?
------------ Дoбавленo в 12.03:
да еще и грузится долго(у меня комп, хочу заметить, не слабый)
------------ Дoбавленo в 12.08:
прошу прощения, код рабочий, смысл rnd тоже понял. но в твоем варианте нужно listbox помещать в динамический элемент, т.к. кол-во id по условия не ограничивается, а у тебя выводятся всего 3 id
------------ Дoбавленo в 12.10:
в моем варианте можно настроить так, чтобы он не выводил первую пустую строку(или удалять ее по окончанию цикла), а потом разбивать на группы по пустой строке
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2014-07-25 15:24:15 ЛС | профиль | цитата
knoot0279 писал(а):
в моем варианте можно
Попробуй в твоём варианте заменить StrList на этот
code_34051.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_34051.txt [235B] [139]
Ответов: 327
Рейтинг: 5
#13: 2014-07-25 20:21:58 ЛС | профиль | цитата
беда))
ну тогда сначала сортировать, а потом перебирать список
карма: 0

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