|
v7: Получить диапазоны значений | ☑ | ||
---|---|---|---|---|
0
DeMi4
29.08.12
✎
09:31
|
Есть таблица значений с разными кодами надо из нее получить значения
Например 1 2 3 4 10 11 12 15 Получить ТЗ следующего вида 1-4 10-12 15 Подскажите как можно так перебрать Вот то что пришло в голову мне тзДиапозоны = СоздатьОбъект( "ТаблицаЗначений" ); тзДиапозоны.НоваяКолонка( "НачалоДиапозона" ); тзДиапозоны.НоваяКолонка( "КонецДиапозона" ); тзДиапозоны.НоваяКолонка( "ШиринаДиапозона" ); НачалоДиапозона = тзДК.ПолучитьЗначение(1,1); КонецДиапозона = тзДК.ПолучитьЗначение(1,1); КолСтрокТЗ = тзДК.КоличествоСтрок(); Для НС = 2 По КолСтрокТЗ Цикл тзДК.ПолучитьСтрокуПоНомеру( НС ); Если ( тзДК.КодКарты = КонецДиапозона + 1 ) И (НС <> КолСтрокТЗ) Тогда КонецДиапозона = тзДК.КодКарты; Иначе тзДиапозоны.НоваяСтрока(); тзДиапозоны.НачалоДиапозона = НачалоДиапозона; тзДиапозоны.КонецДиапозона = КонецДиапозона; тзДиапозоны.ШиринаДиапозона = тзДиапозоны.КонецДиапозона - тзДиапозоны.НачалоДиапозона + 1; НачалоДиапозона = тзДК.КодКарты; КонецДиапозона = тзДК.КодКарты; КонецЕсли; КонецЦикла; |
|||
1
olegves
29.08.12
✎
09:36
|
сформулируй пояснее вопрос
|
|||
2
DeMi4
29.08.12
✎
09:39
|
То есть в ТЗ есть какие коды ( сортировка по возрастанию ). Надо найти возможные диапозоны этих кодов
|
|||
3
KUBIK
29.08.12
✎
09:40
|
(2) а диапазоны где брать?
|
|||
4
andrewks
29.08.12
✎
09:41
|
1. сортируешь
2. двигаешься по ТЗ1, параллельно заполняя ТЗ2: пусть нумерация с 1, код алгоритмический ПредЗнач=ТЗ1[1].Код-100; Для нс=1 по КолвоСтрок Цикл ТекЗнач=ТЗ1[нс]; Если (ТекЗнач>ПредЗнач+1) Тогда ТЗ2.НоваяСтрока(); ТЗ2[НомерТекущейСтроки].НачКод=ТекЗнач; ТЗ2[НомерТекущейСтроки].КонКод=ТекЗнач; Иначе ТЗ2[НомерТекущейСтроки].КонКод=ТекЗнач; КонецЕсли; ПредЗнач=ТекЗнач; КонецЦикла; |
|||
5
vcv
29.08.12
✎
09:47
|
Если стоит проблема с размером таблицы и быстродействием, можно попробовать перебирать не каждый элемент, а, например, через пять. Если, например, ТЗ.ПолучитьЗначение(Позиция+5,1)=ТЗ.ПолучитьЗначение(Позиция,1)+5, значит диапазон еще не закончился, нужно идти дальше. Можно попробовать дихотомией таблицу делить...
|
|||
6
DeMi4
29.08.12
✎
09:53
|
(4) Спасибо! Помогло!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |