Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Цикл посимвольно или как найти ближайшую к началу цифру?

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

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

(42) Уел :( Вот, возьми, сам поставишь на место ==


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.