Имя: Пароль:
1C
1С v8
Цикл посимвольно или как найти ближайшую к началу цифру?
0 Guerro
 
13.03.19
16:47
Есть задача имея код например: "ГС230.150" или "ГС.230-150", преобразоваться его в например в "ГС133" или "ГС330". Нашел только как до точки дойти и обрезать правую часть и дописать свой код. А вот если не точка встречается, а например цыфра, как от нее отрезать. букв в начале не всегда 2, может быть и больше и меньше, но хоть одна всегда есть.
1 Guerro
 
13.03.19
16:50
https://helpf.pro/faq/view/1855.html - не помогло
2 RomanYS
 
13.03.19
16:53
Если Зн = "ГС230.150" Тогда
Возврат "ГС133"
КонецЕсли;

Или там более глубокая логика?
3 Sapiens_bru
 
13.03.19
16:54
"А вот если не точка встречается, а например цыфра"
То что? ГС1234 должно превращаться в ГС123 ?
4 Guerro
 
13.03.19
16:56
(2) что за тупое условие? Он не должен тупо заменять значения, а хавать первые буквы кода
5 Homer
 
13.03.19
16:56
Мало данных, надо ТЗ.
А так перебор по порядку символов (с лева на право). Находим число. Далее надо ТЗ
6 Tatitutu
 
13.03.19
16:57
(0) конечная цель какая ?
7 бегинер
 
13.03.19
16:58
если всегда брать первые три цифры и они всегда есть и идут подряд, то ищи позицию первого символа который цифра и потом бери подстроку начиная с позиции первой найденной цифры длинной 3 символа, потом бери левую часть ( до цифры первой) и из  нее заменой удали все точки, запятые, тире и прочие символы мусор которые могут встречаться
8 Guerro
 
13.03.19
16:58
(6) Взять первые буквы взятого кода и добавить к ним другие цыфры
9 бегинер
 
13.03.19
16:58
(2) улыбнуло :)
10 Guerro
 
13.03.19
16:58
буквы всегда вначале
11 Guerro
 
13.03.19
16:59
(7) буквы разные, длина разная, вы вообще вопрос читали?
12 Guerro
 
13.03.19
16:59
буквы идут подряд
13 Homer
 
13.03.19
16:59
(4) судя по претензиям, нам предлагают сделать код
14 Вафель
 
13.03.19
17:00
цикл по символам - если цифра, то добавляй к "текущему слову", если нет, то новое слово
15 Homer
 
13.03.19
17:00
я за 10 тыс руб готов.
16 бегинер
 
13.03.19
17:00
(11) да читал, мой алгоритм находит первые подряд идущие три цифры и любое кол-во букв в начале кода
17 Guerro
 
13.03.19
17:00
Могут идти нужные нам буквы, потом цыфры, потом буквы, буквы, которые после цифр тоже не нужны
18 Guerro
 
13.03.19
17:01
(13) нет, какой цикл ищет первую попавшуюся цыфру
19 Guerro
 
13.03.19
17:02
(16) может и одна цифра идти
20 бегинер
 
13.03.19
17:02
(18) обычный цикл по каждому символу строковой переменной, в котором текущий символ цикла проверяешь на принадлежность к цифре
21 Guerro
 
13.03.19
17:03
Сорян за цЫфра, теперь буду писать цИфра
22 Guerro
 
13.03.19
17:03
(20) я не нашел цикл "по каждому символу строковой переменной"
23 Guerro
 
13.03.19
17:03
(20) поэтому и сюда написал
24 RomanYS
 
13.03.19
17:04
(4) Как может "ГС230.150" превратиться в "ГС133" твоем примере?
25 бегинер
 
13.03.19
17:04
(22) пока цикл как ты до точки дошел, ы же проверял что это точка? так же проверяй на цифру
26 Sapiens_bru
 
13.03.19
17:04
Плохо искал.
СтрРазделить("ТТ105*810","1234567890")[0] = "ТТ"
27 Guerro
 
13.03.19
17:06
(24) Цикл обходит сначала по одному символу строковой переменной, как только натыкается на цифру, то останавливается и делает Лев("Моя строковая переменная", номер на которой останвоился)
28 Homer
 
13.03.19
17:06
(24) ну тут все очевидно (2)
29 Guerro
 
13.03.19
17:06
(25) очень просто:
Точка = Найти(Код, ".");
Партия = Лев(Код, Точка);
30 Guerro
 
13.03.19
17:07
(26) большое спасибо, это все что я искал. Вопрос был примитивный, а остальные дял себя замудрили
31 RomanYS
 
13.03.19
17:09
(26) вообще
СтрРазделить("ТТ105*810","1234567890")[0]    = "ТТ105*810"
32 RomanYS
 
13.03.19
17:10
(28) Так это я написал, вариант был назван тупым)
33 Sapiens_bru
 
13.03.19
17:10
(31) У вас там какой-то свой 1С.
34 Timon1405
 
13.03.19
17:15
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.Global = Ложь;
RegExp.MultiLine = Ложь;
RegExp.Pattern = "([а-я]+).+";
СтрокаВход = "ГС230пп.150";
СтрокаЗамены = "133";
СтрокаВыход = RegExp.Replace(СтрокаВход,"$1")+СтрокаЗамены;
35 бегинер
 
13.03.19
17:16
Если Найти("0123456789",тек_символ) > 0 тогда это_число=истина
36 RomanYS
 
13.03.19
17:18
(33) Это иp табло ОФ 8.3.9.2170
37 Guerro
 
13.03.19
17:18
(34) не люблю подобное использовать в своем коде. Я про VBS
38 Guerro
 
13.03.19
17:19
(31) Вот решение, забейте.
39 Скиурус
 
13.03.19
17:33
(35) Как по мне
Если Найти("0123456789",тек_символ) > 0 тогда это_число=истинаотвратительно. Нужно
Если тек_символ > "0" и тек_символ < "9" тогда это_число=истина
40 Вафель
 
13.03.19
17:36
(39) чем это лучше?
41 Вафель
 
13.03.19
17:36
может тогда через попытку Число(Строка) ?
42 бегинер
 
13.03.19
17:39
(39) как можно сравнивать мой рабочий код с нерабочим :) 0 и 9 в вашем коде не пройдут проверку...
43 repin_mike
 
13.03.19
17:50
Ответ = "";
ПравильныеСимволы = "ЙЦУКЕЁНйцукеён";
Для Сч = 1 по СтрДлина(Строка) Цикл
        ТекСимв = Сред(Строка, Сч, 1);
        Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда
                Ответ = Ответ + ТекСимв;
            КонецЕсли;
        КонецЦикла;
Возврат Ответ;
44 Сияющий в темноте
 
13.03.19
21:15
читаем посимвольно сначала до первой цифры,получаем буквенный префикс,далее к нему лепим наши цифры?
45 Скиурус
 
13.03.19
23:33
(40) Ну теоретически это может быстрее работать. Ну и, повторяюсь, вкусовщина, но выглядит логичнее. И нет, через Попытку тоже как-то не так смотрится.

(42) Уел :( Вот, возьми, сам поставишь на место ==
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший