|
Как красиво кинуть в массив | ☑ | ||
---|---|---|---|---|
0
Coole
15.07.17
✎
09:17
|
Номера строк из строки вида "5-15,18,40"?
|
|||
1
Имитация работы
15.07.17
✎
09:18
|
Прочитать в СП про СтрРазделить
|
|||
2
Coole
15.07.17
✎
09:22
|
ну а потом искать в массиве "-" и добавлять 6 (строку),7(строку), ..., 15?
|
|||
3
Имитация работы
15.07.17
✎
09:30
|
Именно. Потому что за применение СтрРазделить еще раз для получения границ тебя уволят.
|
|||
4
Имитация работы
15.07.17
✎
09:32
|
Ты же не хочешь писать конечный автомат пр разбору строки в один проход с анализом разделителей. Тебе лень.
|
|||
5
Coole
15.07.17
✎
09:34
|
все издев_аетесь
в общем наверное с конца буду разбирать строку |
|||
6
Имитация работы
15.07.17
✎
09:35
|
Можешь также попробовать использовать регэкспы с именованными группами. Но ты их не осилишь и придешь кляньчить готовый код.
|
|||
7
Имитация работы
15.07.17
✎
09:36
|
(5) Сделай одолжение
|
|||
8
Мимохожий Однако
15.07.17
✎
09:38
|
(5) Сначала разбираешь по запятым, потом по черточкам. Делов-то.И не важно, с какого конца.
|
|||
9
Cyberhawk
15.07.17
✎
09:39
|
(6) Не кроссплатформенно будет
|
|||
10
Имитация работы
15.07.17
✎
09:41
|
А можно еще, кстати, xslt преобразование написать, чтобы в конце сразу получить сериализованный массив. Причем уже с преобразованными типами.
|
|||
11
Asmody
15.07.17
✎
09:42
|
(10) сейчас ты ей мозг взорвешь
|
|||
12
Имитация работы
15.07.17
✎
09:43
|
Видишь, сколько вариантов? Красота, она страшная сила!
|
|||
13
D_Pavel
15.07.17
✎
09:50
|
(0) Делаешь СтрРазделить
Пробегаешь по полученному массиву циклом делаешь СтрРазделить на каждом элементе массива, получаешь новый массив, например [5, 15] пробегаешь циклом от первого значения нового массива до последнего, например от 5 до 15. Заносишь все полученные значения в результирующий массив. Конец |
|||
14
Лефмихалыч
15.07.17
✎
09:58
|
everybody stand back!
Массив = КрасивоКинутьВМассив("5-15,18,40"); Функция КрасивоКинутьВМассив(Строка) RegEx = Новый COMОбъект("VBScript.RegExp"); RegEx.Pattern = "\d+" RegEx.Global = True; Matches = RegEx.Execute(Строка); Результат = Новый Массив; для i=0 по Matches.Count-1 Цикл Результат.Добавить(Matches.Item(i).Value); КонецЦикла Возврат Результат; КонецФункции |
|||
15
Asmody
15.07.17
✎
09:59
|
А вот можно было бы в 1С функцию параметром передавать, вышло бы все в одну строку.
|
|||
16
Имитация работы
15.07.17
✎
10:04
|
(14) 5-15 должно породить 10 элементов, а не 2
|
|||
17
Имитация работы
15.07.17
✎
10:06
|
(15) На клиенте можно. Через описание оповещения. Сначала взорвет, потом съест (:
|
|||
18
Имитация работы
15.07.17
✎
10:09
|
(13) Вот ваша лодка!
|
|||
19
Лефмихалыч
15.07.17
✎
10:14
|
(16) тогда - конечный автомат
|
|||
20
Coole
15.07.17
✎
10:29
|
СтрокаНомеров = "12-18,20,40,4,5-9";
СтрокаНомеров = СтрокаНомеров + ","; ТЗСтрок = Новый ТаблицаЗначений; ТЗСтрок.Колонки.Добавить("НомерСтроки"); Пока Найти(СтрокаНомеров,",") > 0 Цикл ЗначЗап = Найти(СтрокаНомеров,",") - 1; //Стр = ТЗСтрок.Добавить(); НомерСтроки = Лев(СтрокаНомеров,ЗначЗап); Если Найти(НомерСтроки, "-") > 0 Тогда ЗачПр = СтрДлина(НомерСтроки) - Найти(НомерСтроки,"-"); ЗачЛв = Найти(НомерСтроки,"-") - 1; НомПр = Число(Прав(НомерСтроки, ЗачПр)); НомЛв = Число(Лев(НомерСтроки, ЗачЛв)); Для i = НомЛв По НомПр Цикл Стр = ТЗСтрок.Добавить(); Стр.НомерСтроки = i; КонецЦикла; Иначе Стр = ТЗСтрок.Добавить(); Стр.НомерСтроки = Число(НомерСтроки); КонецЕсли; СтрокаНомеров = Прав(СтрокаНомеров,(СтрДлина(СтрокаНомеров) -ЗначЗап-1)); КонецЦикла; Если СтрДлина(СтрокаНомеров) > 0 Тогда Стр = ТЗСтрок.Добавить(); Стр.НомерСтроки = Число(СтрокаНомеров); КонецЕсли; |
|||
21
Coole
15.07.17
✎
10:31
|
(13) поняла, но переписывать не буду.
я так поняла массив нельзя отсортировать? а как же, если пользователь решит сначала напечатать 5, 8, а потом 1 строку? надо ж и напечатать в порядке возрастания 1,5,8 |
|||
22
Garykom
гуру
15.07.17
✎
10:38
|
|
|||
23
Garykom
гуру
15.07.17
✎
10:41
|
(13) Ты конечно извини но проще код написать чем словами объяснить понятно...
|
|||
24
Coole
15.07.17
✎
10:43
|
(22) если в конце ИсхСтр будет 42-45, то ошибка)
|
|||
25
Garykom
гуру
15.07.17
✎
10:44
|
(24) На что поспорим?
|
|||
26
Garykom
гуру
15.07.17
✎
10:49
|
(25)+ Единственно нуна воткнуть условие что ЛевСтр<ПравСтр
|
|||
27
h-sp
15.07.17
✎
10:53
|
(21) зачем в порядке возрастания? Если пользователь написал например "3, 2, 1", значит он хочет в этом порядке, если бы хотел по-другому, написал бы по другому.
|
|||
28
Генератор
15.07.17
✎
10:54
|
Функция ДобавитьВМассив(ЗначениеС, пЗначениеПО = 0)
ЗначениеПо = ?(пЗначениеПО = 0,ЗначениеС,пЗначениеПО); Сообщить("добавляем элементы с "+ЗначениеС +" по "+ЗначениеПо); КонецФункции Процедура КнопкаВыполнитьНажатие(Кнопка) ИсхСтр = "5-15,18,40"; Стр = СтрЗаменить(ИсхСтр,",",");ДобавитьВМассив("); Стр = СтрЗаменить(Стр,"-",","); Стр = "ДобавитьВМассив("+Стр; Стр = СТр+");"; Выполнить(Стр); КонецПроцедуры |
|||
29
Garykom
гуру
15.07.17
✎
11:05
|
(28) И ху из хЭ?
|
|||
30
Генератор
15.07.17
✎
11:09
|
(29) что не нравится? альтернативный метод, работает же )
|
|||
31
Garykom
гуру
15.07.17
✎
11:10
|
(30) Ты серьезно или прикалываешься? У тебя код не запустится этот
|
|||
32
Генератор
15.07.17
✎
11:11
|
(31) да ладно, я не поленился с обработки его скопировал
ну причесать конечно надо... |
|||
33
rphosts
15.07.17
✎
11:13
|
(28) ну и извращенство, давайте ещё СКД сюда подтянем
|
|||
34
Garykom
гуру
15.07.17
✎
11:14
|
(32) Угадай что будет если исходная строка будет содержать хотя бы пару тысяч "," и полтысячи "-"?
|
|||
35
Garykom
гуру
15.07.17
✎
11:16
|
(34)+ это было 1-е
А 2-е это объясни как оно будет работать в 8-ке УФ в безопасном то с этим "Выполнить" ? |
|||
36
Генератор
15.07.17
✎
11:18
|
(34) а руками на пару тысяч строку формировать не извращение? я не претендовал на рабочий вариант, просто альтернатива. нестандартный подход...
|
|||
37
Garykom
гуру
15.07.17
✎
11:19
|
(36) Иногда так хочется таких "нестандартных" взять за шейку и ...
|
|||
38
Garykom
гуру
15.07.17
✎
11:19
|
(37)+ Судя по всему те прямая дорога в 1С в разработчики типовых... они любят нестандартных и альтернативных (я бы даже сказал одаренных)
|
|||
39
D_Pavel
15.07.17
✎
11:22
|
(21) Массиб конечно можно отсортировать, но в задании этого не было.
Твое решение слишком длинное. Если нужно действительно красиво, лучше перепиши как в (13), тогда не будет ни одной проверки, и только два цикла. Гораздо короче получится |
|||
40
Генератор
15.07.17
✎
11:24
|
(38) что это тебя так зацепило? не, до типовых мне далеко...
|
|||
41
D_Pavel
15.07.17
✎
11:26
|
(23) Извиняю, но Coole говорит что поняла. А 1С под рукой у меня нет, я давно соскочил с 1С. Могу решение на JS написать, будет еще короче и красивее
|
|||
42
h-sp
15.07.17
✎
11:32
|
(40) объясни как твоя эта программа сделает из 5-15, массив чисел 5,6,7,8,...,15 ??
|
|||
43
Генератор
15.07.17
✎
11:37
|
(42) никак, в функцию передаются 2 параметра 5 и 15, а в ней уже делаешь что хочешь, хоть циклом обходи, я не стал расписывать
|
|||
44
Злопчинский
15.07.17
✎
11:39
|
(16) не 10, а 11
|
|||
45
iceman2112
15.07.17
✎
14:48
|
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок
|
|||
46
Garykom
гуру
15.07.17
✎
15:48
|
(45) А этот уже законченный 1Сник... который без БСП как без рук ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |