Добрый день. Если использовать СтрЗаменить(Строка,"/","_"); то заменит все символы "/", а как можно заменить только первый в строке?
---
Заменит только первый найденный знак / на _

```1c
    МояСтрока=СтрЗаменить(Лев(МояСтрока,Найти(МояСтрока,"/")),"/","_")+Сред(МояСтрока,Найти(МояСтрока,"/")+1);
```
---
можно однобокое условие написать, если дадите четкий пример. А так думаю вам нужно в строну регулярных выражений идти!
---
Позиция = Найти(ЦелаяСтрока,"/");
ПерваяЧасть = СокрЛП(Лев(ЦелаяСтрока,Позиция -1);
ВтораяЧасть=СокрЛП(Сред(ЦелаяСтрока,Позиция +1);

Так вот тут получается что оно находит первую позицию этого слэша, а в строке как правило либо один слэш либо 2,если два слэша,то ПерваяЧасть и ВтораяЧасть выполнять от второго слэша
---
а в строке как правило либо один слэш либо 2,если два слэша,то ПерваяЧасть и ВтораяЧасть выполнять от второго слэша
Ничего не понял, но очень интересно (с)

Можно пример?

Если нужен второй слэш, то
СтрНайти (StrFind)
Синтаксис:
СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>)
---
в УТ10.3 нет такой функции,или я ошибаюсь?
---
Это в платформе. Появилось в версии 8.3.6.1977
---
тупанул я,и собственно не задумался))
у Меня 8.3.12.1790,
но странно что я не вижу этой функции
---
(15)
---
ну и? 8я сверху
---
Режим совместимости в конфигурации какой? Если 8.3.6 или выше - то есть, если ниже - нет.
---
у Меня 8.3.12.1790,
но странно что я не вижу этой функции
---
Режим совместимости это не версия платформы в которой вы работаете.
Это свойство корневого элемента конфигурации. В свойствах справа внизу.
---
(6) тогда конечно это ваше решение. Я правда не тестировал , может где -то ошибка есть но мысль эта угадана правильно.

Можно так сделать

```1c
    Строка = "/1111";
    ВашСимвол = ".";
    Строка = СтрЗаменить(Лев(Строка,1),"/",ВашСимвол) + Сред(Строка,2,СтрДлина(Строка));
```

В код

```1c
    Строка = "/1111";
    ВашСимвол = ".";
    Позиция = Найти(ЦелаяСтрока,"/");
    Если Позиция тогда
    Строка = СтрЗаменить(Лев(Строка,Позиция),"/",ВашСимвол) + Сред(Строка,Позиция,СтрДлина(Строка));
    КонецЕсли;
```
---
Ваш вариант лучший :) только в функции Сред () не нужен третий параметр.
---
Спасибо, ну вы разберетесь я так понимаю.
Желаю удачи!!!
---
спасибо,вроде по всем нюансам прошёлся уже в задаче)
---
Надеюсь мой ответ был лучшим. Удачи.
---
а если 3 слеша?)
Попробуй функцию
```1c
    СтрРазделить()
```
 Думаю найдется потом самое простое решение! Как собрать нужный результат!
---
в строке больше 2-х точно не будет.

Холодильник Атлант 2-х камерный / Дверь Белая / Дверь Красная
Холодильник Атлант 2 / Дверь Белая

Это как пример из Головы
---
А в результате, после обработки этих примеров, что должно быть?
---
суть работы.
1.Создаётся номенклатура около 7000 позиций из эксель,
2. Из названия,вырезается первая часть номенклатуры и вторая часть номенклатуры,(это два товара будет) и делаю в РегистрСвед. Комплектацию номенклатуры, к созданным из экселя.
3. В Рег.Свед.ШК,заливаются штрихкода товаров.
---
Не не, я в смысле именно текущую задачу - заменить "/" на "." на примере строк из (16).
---
Подвязываю комплектующее к Созданной номенклатуре, из каких товаров она состоит,а состав,я как раз и ищу в названии Номенклатуры это к примеру:

1. Холодильник Атлант 2-х камерный / Дверь Белая / Дверь Красная
а. Холодильник Атлант 2-х камерный
б.Дверь Белая
в.Дверь Красная

2.Холодильник Атлант 2 / Дверь Белая
а. Холодильник Атлант 2
б.Дверь Белая
---
Примерно так:

```1c
    ТекСтрока = " Холодильник Атлант 2-х камерный / Дверь Белая / Дверь Красная";

    МассивНаименований = Новый Массив;

    СтрокаДляОбработки = ТекСтрока;
    ПозицияРазделителя = Найти(СтрокаДляОбработки,"/");
    Пока ПозицияРазделителя>0 Цикл
    ЧастьНаименования = Лев(СтрокаДляОбработки,ПозицияРазделителя-1);
    МассивНаименований.Добавить(ЧастьНаименования);
    СтрокаДляОбработки = Сред(СтрокаДляОбработки,ПозицияРазделителя+1);
    ПозицияРазделителя = Найти(СтрокаДляОбработки,"/");
    КонецЦикла;

    Если ЗначениеЗаполнено(СтрокаДляОбработки) Тогда
    МассивНаименований.Добавить(СтрокаДляОбработки);
    КонецЕсли;
```
---
(40) скоро попробую,отпишусь. Спасибо большое всем
---
```1c
    Функция СтрРазделитьОФ(Знач Стр, Разделитель="/")
    МассивСтрок = Новый Массив;
    ПозицияСимвола = Найти(Стр, Разделитель);
    Пока ПозицияСимвола > 0 Цикл
    НайденнаяСтрока = СокрЛП(Лев(Стр,ПозицияСимвола-1));
    МассивСтрок.Добавить(НайденнаяСтрока);
    Стр = СокрЛП(Прав(Стр, СтрДлина(Стр)- ПозицияСимвола));
    ПозицияСимвола = Найти(Стр, Разделитель);
    КонецЦикла;
    МассивСтрок.Добавить(Стр);
    Возврат МассивСтрок;
    КонецФункции
```
---
я так понимаю не желательно просто взять и изменить? Режим совместимости?
---
Воу воу.
Положи мышь и сделай несколько шагов назад.
---
да не,я не балуюсь с этим)) просто интересно на сколько много чего полетит)))
---
Что-то может перестать работать.
Что-то станет работать не так, как раньше.
Подробно надо читать в документации по платформе.
---
буду читать,а то чёт не вдавался в такие подробности,но уже стало интересно)
---
а нужно ли вообще обновление это, для каких целей,какие есть плюсы ?,удобства программирования,что ещё? или есть может ещё минуса какие в этом?
---
есть предположение, почему ошибка?
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(149,7)}: Процедура или функция с указанным именем не определена (СтрРазделить)
ст = «?»СтрРазделить(ЦелаяНоменклатура,"/"); (Проверка: Толстый клиент (обычное приложение))
---
Почему предположение?
Однозначная причина - у вас режим совместимости ниже 8.3.6.
---
я вас понял.
вот моя версия((
Версия 8.2.16
---
там используется процедура из общего модуля что-то типо разложить строку в массив.
---
в итоге не работает функция:
1.СтрНайти
2.СтрРазделить
Какие есть ещё варианты?
(32)
(21)
---
правильно это функции с версии платформы 8.3.6. Если у вас устаревшая платформа нужно использовать их устаревшие аналоги.
---
Обойти построчно все строки, проверять, если первый символ строки "/", то также как тут https://forum.infostart.ru/forum9/topic228279/
брать строку без первого символа и "_"
---
Извиняюсь за некорректно поставленный вопрос, вопрос по другому немного озвучу:
В строке есть 1 или 2 слэша ("/"), стоять могут в произвольном порядке,строка из 100-120 символов примерно, так вот мне нужно найти позицию второго слэша
---
```1c
    Строка = "/1111";
    ВашСимвол = ".";
    Строка = СтрЗаменить(Лев(Строка,1),"/",ВашСимвол) + Сред(Строка,2,СтрДлина(Строка));
```

Получилось ".1111"

Так как-то. Устроит или картинку добавить?

вообще решений тьма
---
у меня символ может стоять в произвольном месте,в этом и беда
---
можно к примеру так

```1c
    Функция НайтиИЗаменитьПервыйСимвол(ИсходнаяСтрока,ПодстрокаПоиска,ПодстрокаЗамены)
    позСимвола = СтрНайти(ИсходнаяСтрока,ПодстрокаПоиска);

    ЛевЧастьДоЗамены = Лев(ИсходнаяСтрока,позСимвола);

    ЛевЧасть = СтрЗаменить(ЛевЧастьДоЗамены,ПодстрокаПоиска,ПодстрокаЗамены);
    ПравЧасть= Прав(ИсходнаяСтрока, СтрДлина(ИсходнаяСтрока)- позСимвола);

    Возврат ЛевЧасть+ПравЧасть;
    КонецФункции
```
---
Спасибо ребят за столько много вариантов,сейчас буду пробовать)
---
Вот ещё вариант:

```1c
    мСтрока = "//123!!..//23";
    ПервыйДляУдаления = Найти(мСтрока, "/");
    мСтрока = ?(ПервыйДляУдаления = 1, Сред(мСтрока, 2), Сред(мСтрока, 1, ПервыйДляУдаления - 1) + Сред(мСтрока, ПервыйДляУдаления + 1));
```

Возвращает "/123!!..//23"
---
Если он буквально первый в строке :)

```1c
    МояСтрока=?(Лев(МояСтрока,1)="/",СтрокаКотораяЗаменитСлэш+Сред(МояСтрока,2),МояСтрока);
```

(19) а если вдруг в строке вообще не будет ни одного знака /
---
а если вдруг в строке вообще не будет ни одного знака / вывалится в ошибку :)
а что делать то, советы то бесплатные....
---
а что делать то, советы то бесплатные....
:))))
---
Обработаем ошибки)))
---
Всегда будет либо 1 или 2 знака)
---
Заменит только первый найденный знак / на _

```1c
    МояСтрока=СтрЗаменить(Лев(МояСтрока,Найти(МояСтрока,"/")),"/","_")+Сред(МояСтрока,Найти(МояСтрока,"/")+1);
```
---
очень хороший вариант решения,то что надо!) спасибо огромное всем)
---
Подтверждаю.
---
.