|
Перебор символов | ☑ | ||
---|---|---|---|---|
0
Nykos
05.09.13
✎
17:17
|
Помогите, пожалуйста, написать условие, при котором строка вида "4.10.1"
будет преобразована в "0410010000". Т.е. так, чтобы до точки или между точками или после точки было два символа. Если один символ - дополнять нулем слева до двух символов. Теоретически как это сделать понимаю, а практически ну никак добиться не могу( |
|||
1
Абыр
05.09.13
✎
17:21
|
Найти
|
|||
2
Абыр
05.09.13
✎
17:21
|
СтрДлина
|
|||
3
Абыр
05.09.13
✎
17:21
|
Сред
|
|||
4
Nykos
05.09.13
✎
17:23
|
извини, но мне так совершенно ничего не понятно
|
|||
5
Абыр
05.09.13
✎
17:24
|
Find
|
|||
6
Абыр
05.09.13
✎
17:24
|
StrLen
|
|||
7
Абыр
05.09.13
✎
17:24
|
Mid
|
|||
8
Euguln
05.09.13
✎
17:25
|
(4) хочешь готовый алгоритм?
|
|||
9
KishMish
05.09.13
✎
17:25
|
(4) СтрЗаменить
|
|||
10
Euguln
05.09.13
✎
17:25
|
(4) Типовая конфа есть под рукой?
|
|||
11
Жан Пердежон
05.09.13
✎
17:26
|
Если условие="4.10.1" тогда условие="0410010000" КонецЕсли;
|
|||
12
palpetrovich
05.09.13
✎
17:27
|
а что, всем понятно как получилиь "0000" в конце?
|
|||
13
giallo
05.09.13
✎
17:27
|
(0) Если ИСТИНА Тогда
|
|||
14
Euguln
05.09.13
✎
17:30
|
(12) элементрано, это если будет строка "4.10.1.0.0"
|
|||
15
manyak
05.09.13
✎
17:30
|
разбиваешь строку на многострочную через стрзаменить
СтрЗаменить (<Исходная строка>, <Искомое значение>, <Значение для замены>) Символы.ПС дальше цикл и вперед |
|||
16
МойКодУныл
05.09.13
✎
17:30
|
(12) телепатирую - остаток символов до нужной длины заполнить нулями справа :)
|
|||
17
manyak
05.09.13
✎
17:33
|
(15) и в цикле юзай формат - сделаешь лидирующие нули
|
|||
18
МойКодУныл
05.09.13
✎
17:33
|
(15) ага, типа того: //без нулей в конце
СтрокаКОбработке = СтрЗаменить(ИсхСтрока,".", Символы.ПС); ИтогСтрока = ""; Для Сч = 1 По СтрЧислоСтрок(СтрокаКОбработке) Цикл ТекСтрока = СтрПолучитьСтроку(СтрокаКОбработке, Сч); Пока СтрДлина(ТекСтрока)<2 Цикл ТекСтрока = "0" + ТекСтрока; КонецЦикла; ИтогСтрока = ИтогСтрока + ТекСтрока; КонецЦикла; |
|||
19
palpetrovich
05.09.13
✎
17:35
|
(18)
МнСтр = СтрЗаменить(ИсходнаяСтрока,".",Символы.ПС); РезСтрока = ""; Для н=1 По СтрЧислоСтрок(МнСтр) Цикл РезСтрока = РезСтрока + Прав("0"+СтрПолучитьСтроку(МнСтр,н),2); КонецЦикла |
|||
20
palpetrovich
05.09.13
✎
17:35
|
короче типа :)
|
|||
21
МойКодУныл
05.09.13
✎
17:37
|
(20)а если символов 3 между точками - потеряем один:). Хотя, может так и надо, заказчик не описал в ТЗ=))
|
|||
22
manyak
05.09.13
✎
17:38
|
новая_строка=перебор_символов("4.10.1");
|
|||
23
Nykos
05.09.13
✎
17:38
|
(21) нет, символьный формат максимум такой: xx.xx.xx
|
|||
24
Nykos
05.09.13
✎
17:39
|
(21) ну и варьируется - где один, где два
|
|||
25
Nykos
09.09.13
✎
14:07
|
в общем вышло что-то такое, ошибок не находит в коде, но и при выполнении внешней обработки в справочнике ничего не происходит
Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос("ВЫБРАТЬ | Прейскурант.Ссылка |ИЗ | Справочник.Прейскурант КАК Прейскурант"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Объект = Результат.Ссылка.ПолучитьОбъект(); стр = Объект.НомерРасценки; с = ""; тмп = ""; Пока СтрДлина(стр) > 0 Цикл Если Лев(стр, 1) = "." Тогда с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00")); тмп = ""; Иначе тмп = тмп + Лев(стр, 1); КонецЕсли; стр = Прав(стр, СтрДлина(стр) - 1); КонецЦикла; с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00")); Объект.Записать(); КонецЦикла; ЭтаФорма.Обновить(); КонецПроцедуры что я упустил? |
|||
26
Rie
09.09.13
✎
14:11
|
(25) Как минимум - чтение документации по Найти, Лев и Сред.
Ну и по ВыборкаИзРезультатаЗапроса за компанию. |
|||
27
Nykos
09.09.13
✎
16:00
|
Почитал. Осознал. Сделал.
|
|||
28
Infsams654
09.09.13
✎
16:26
|
(27) можно проще, если типовая. Там есть Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
|
|||
29
Odavid
09.09.13
✎
16:28
|
А слабо любому из вас сделать перебор в запросе? ))
|
|||
30
Infsams654
09.09.13
✎
17:20
|
(29) ну-ну - делать больше нечего. (28) - наибыстрейше
|
|||
31
Nykos
09.09.13
✎
18:12
|
В общем, не знаю, рационально или нет, но результат получил нужный)
Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос("ВЫБРАТЬ | Прейскурант.Ссылка |ИЗ | Справочник.Прейскурант КАК Прейскурант"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Объект = Результат.Ссылка.ПолучитьОбъект(); стр = Объект.НомерРасценки; с = ""; тмп = ""; Пока СтрДлина(стр) > 0 Цикл Если Лев(стр, 1) = "." Тогда с = с + ?(СтрДлина(тмп) = 2,тмп,?(СтрДлина(тмп) = 1,"0" + тмп, "00")); тмп = ""; Иначе тмп = тмп + Лев(стр, 1); КонецЕсли; стр = Прав(стр, СтрДлина(стр) - 1); КонецЦикла; с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00")); Объект.НомерРасценки = с; Объект.Записать(); КонецЦикла; ЭтаФорма.Обновить(); КонецПроцедуры |
|||
32
Rie
09.09.13
✎
18:18
|
(31)
Пока Результат.Следующий() Цикл стр = Объект.НомерРасценки; числа = Новый Массив; поз = Найти(стр,"."); Пока поз>0 Цикл числа.Добавить(Число(Лев(стр,поз-1))); стр = Сред(стр,поз+1); поз = Найти(Стр,"."); КонецЦикла; Если НЕ ПустаяСтрока(стр) Тогда числа.Добавить(Число(стр)); КонецЕсли; // и вот тут делаешь с числа всё, что тебе заблагорассудится КонецЦикла; |
|||
33
Зойч
09.09.13
✎
18:19
|
Вместо этого
|
|||
34
Зойч
09.09.13
✎
18:20
|
?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
лучше Прав("00" + тпм, 2) |
|||
35
Infsams654
09.09.13
✎
18:21
|
(31) Гы... Еще раз нажми КнопкаВыполнитьНажатие(Кнопка)
|
|||
36
Murzz
09.09.13
✎
18:30
|
вот так думаю проще и быстрее будет
Строка = "4.10.1"; м = ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{0,{""S"",""" + СтрЗаменить(СтрЗаменить(Строка, """", """"""), ".", """},{""S"",""") + """}}}"); Результат = ""; Для Каждого э Из м Цикл Результат = Результат+ Прав("00" + э, 2); КонецЦикла; сообщить(Результат); |
|||
37
DS
09.09.13
✎
19:08
|
(36) Не проще и не быстрее (19).
|
|||
38
Infsams654
09.09.13
✎
19:14
|
(36) не надо выкрутасов. не врубишся.
Надо по простому, чтоб было понятно. Самое простое: Получить массив из строки через РазложитьСтрокуВМассивПодстрок Если в массиве 3 элемента, то для каждого сделать ЭлементМассива = Прав("0" + ЭлементМассива, 2); если нет, то уже преобразовано, либо что-то кривое (тут отдельные разборки) Потом вернуть сцеплением через точку массив обратно в строку |
|||
39
Infsams654
09.09.13
✎
19:19
|
(38) блин, посмотрел начало, там без точки надо.
Тогда "Потом вернуть сцеплением всех элементов массива обратно в строку" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |