Имя: Пароль:
1C
1С v8
прибавка к числу
0 Flempy
 
15.11.22
13:00
Задача следующая: дана строка, в которой находятся либо только числа, либо символы и числа. Например "AG-239", какую функцию можно написать, чтобы прибавить к этому номеру единицу, чтобы получилось "AG-240"
1 rudnitskij
 
15.11.22
13:05
(0) вычленяете из строки часть с цифрами, преобразуете в число, прибавляете к нему единицу и собираете строку обратно
2 vbus
 
15.11.22
13:08
данную строку проверить там находятся числа или символы и числа, если только числа, то превратить строку в число прибавить один, превратить число в строку, записать. если символы и числа выбрать только числа, превратить строку в число прибавить один, превратить число в строку, записать.
3 ejikbeznojek
 
15.11.22
13:09
Регулярное выражение написать. Ну или если не осилишь, то

ЧислоСтрокой="";
Для сч=1 по стрдлинна(ТвояСтрока) цикл
Попытка
ЧислоСтрокой=ЧислоСтрокой+строка(Число(сред(ТвояСТрока,сч,1)));
исключение
продолжить
конеццикла

если числострокой<>"" тогда
НовоечислоСтрокой=строка(число(числоСтрокой)+1);
СтрЗаменить(ТвояСтрока,ЧислоСтрокой,НовоечислоСтрокой);
4 Flempy
 
15.11.22
13:10
(1) Так и делал, но не понятно что делать с "Тире", при выборке он читает как будто это отрицательное число и соответственно будет не "AG-240", а "AG-238"
5 Kassern
 
15.11.22
13:10
(0) А может быть такой пример - 24V5j4k? Если да, то какой должен быть результат?
6 Kassern
 
15.11.22
13:12
(4) Проходите строку посимвольно и проверяете, цифра это, или нет. Если цифра то записываете в строку. В конце эту строку преобразуете в число и добавляете 1.
Проверять на цифру можно на вхождение в массив, который состоит из цифр, или через попытку.
7 Serg_1960
 
15.11.22
13:13
[подсказка] вопрос автора - на тему автонумерации с использованием префикса. Нет смысла лисапед изобретать.
8 Flempy
 
15.11.22
13:14
(5) скорее всего нет, только на конце цифры
(6) Попробую так сделать, спасибо
9 Галахад
 
гуру
15.11.22
13:15
:-)
ААА = СтрСоединить(СтрРазделить(Стр, СтрСоединить(СтрРазделить(Стр, "0123456789"), "")), "");
10 Ryzeman
 
15.11.22
13:17
(8) Легко гуглится, хотя и самому написать не сложно:

Функция ПолучитьЧисловуюСтроку(Строка) Экспорт    
    Результат = Строка;  
    Индекс = 1;  
    ДоступныеСимволы = "0123456789";
    Пока Индекс <= СтрДлина(Результат) Цикл
        ПроверяемыйСимвол = Сред(Результат, Индекс, 1);
        Если СтрНайти(ДоступныеСимволы, ПроверяемыйСимвол) = 0 Тогда
            Результат = СтрЗаменить(Результат, ПроверяемыйСимвол, "");
            Продолжить;
        КонецЕсли;
        Индекс = Индекс + 1;
    КонецЦикла;
    
    Возврат Результат;      
КонецФункции

Запоминаешь эту строку, преобразуешь в число, прибавляешь 1, назад в строку и через СтрЗаменить меняешь.
Но это не будет работать если у тебя что то вроде 245xz51
11 rudnitskij
 
15.11.22
13:19
(4) тире это разве число? Что тут может быть непонятного?
12 Ryzeman
 
15.11.22
13:20
(11) Может он имеет ввиду что тире минусом может быть?)
13 Flempy
 
15.11.22
13:21
(12) именно
14 Ryzeman
 
15.11.22
13:23
(13) Ну у тебя же не может быть отрицательных чисел, если речь о какой то последовательной нумерации? Как строку от всего кроме цифр я выше скинул
15 Flempy
 
15.11.22
13:29
(14) Я просто немного по-другому отбирал,

        ЦелеваяСтрока = "";
        СерияПродукции = ВыборкаМаркировки.Серия;
        КоличествоСимволов = СтрДлина(СерияПродукции);
        Пока КоличествоСимволов > 0 Цикл    
            Попытка ЧисловоеЗначениеСерии = Число(СерияПродукции);
                Прервать;
            Исключение
                ЦелеваяСтрока = ЦелеваяСтрока + Лев(СерияПродукции,1);
                Сообщить(ЦелеваяСтрока);
                СерияПродукции = Сред(СерияПродукции,2,КоличествоСимволов);
                КоличествоСимволов = СтрДлина(СерияПродукции);
            КонецПопытки;
        КонецЦикла;
        ИтоговаяСтрока = ЦелеваяСтрока + Строка(ЧисловоеЗначениеСерии);
16 Flempy
 
15.11.22
13:31
(15) Т.е. я уменьшал строку слева по одному символу и проверял, являлось ли оно числом, затем прибавлял единицу и сливал со строкой, которую отсеивал вначале
17 Kassern
 
15.11.22
13:33
(16) забавно)
Храните числовой номер серии и не парьтесь в дальнейшем)
18 Serg_1960
 
15.11.22
13:34
Игры разума :)
Если строка автора имеет вид "XXX-NNN", где "X" - произвольные символы, "N" - произвольные цифры, то:

СтрЗаменить(Лев(СтрНом,Найти(СтрНом,"-")-1)+"-"+(1+Прав(СтрНом,СтрДлина(СтрНом)-Найти(СтрНом,"-"))),Символы.НПП,"");
19 Serg_1960
 
15.11.22
13:35
*(18)  дополнение ведущими нулями - не заказывали :)
20 Vakhrin
 
15.11.22
13:38
Я не понял, а где реакция на (9)?! )
21 Ryzeman
 
15.11.22
13:39
(16) Это как отрывать муравью по 1 лапке и проверять сможет ли он дальше бежать или нет... Ужас)
22 Serg_1960
 
15.11.22
13:39
(20) Вам аплодисменты или крики "Браво, брависимо"?
23 Vakhrin
 
15.11.22
13:50
(22) достаточно глубокомысленного прищура... не увидел его просто, простите
24 Ryzeman
 
15.11.22
13:59
(20) На самом деле просто лень прикидывать какие там могут быть ошибки и подводные камни. Если их нет, то модно, молодёжно, неплохо)