| 
    
            
         
         | 
    
  | 
Аналог методу СтрЗаменить() | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        dart909    
     05.08.15 
            ✎
    14:36 
 | 
         
        Подскажите возможно ли в строке вместо подстроки вставить какое то значение без использования метода СтрЗаменить()?     
         | 
|||
| 
    1
    
        Рэйв    
     05.08.15 
            ✎
    14:38 
 | 
         
        Можно. Перебрать по символьно.     
         | 
|||
| 
    2
    
        xaozai    
     05.08.15 
            ✎
    14:38 
 | 
         
        RegExp, как альтернативу можно использовать.     
         | 
|||
| 
    3
    
        dart909    
     05.08.15 
            ✎
    14:40 
 | 
         
        (1) а как это выглядит хотя бы примерно?     
         | 
|||
| 
    4
    
        Timon1405    
     05.08.15 
            ✎
    14:40 
 | 
         
        (0)хватит уже ходить вокруг да около. Будь мужиком, озвучь задачу полностью     
         | 
|||
| 
    5
    
        orefkov    
     05.08.15 
            ✎
    14:41 
 | 
         
        (0)
 
        А в чём сакральный смысл сего мистического действа? Может, у вас религиозный запрет на использование СтрЗаменить? Или у начальника редкая болезнь - впадание в ступор при прочтении последовательности "стрзаме"?  | 
|||
| 
    6
    
        Лодырь    
     05.08.15 
            ✎
    14:43 
 | 
         
        (0) Например в цикле крутить поиск позиции вхождения подстроки и использовать чтонибудь в стиле
 
        ИсходнаяСтрока = Лев(ИсходнаяСтрока,ПозицияЧтоМеняем)+НаЧтоМеняем+Сред(ИсходнаяСтрока,ПозицияЧтоМеняем+ДлинаЧтоМеняем+1)  | 
|||
| 
    7
    
        dart909    
     05.08.15 
            ✎
    14:43 
 | 
         
        (4) Окей 
 
        Процедура ЗаполнитьВариантМой(МойСчетчик) ПроверяемыйТип = Тип("Строка"); Запрос = Новый Запрос; Для каждого Справочник Из Метаданные.Справочники Цикл Для каждого Реквизит Из Справочник.Реквизиты Цикл Если Реквизит.Тип.СодержитТип(ПроверяемыйТип) Тогда Запрос.Текст = " Выбрать |ИмяСправочника.Ссылка |ИЗ Справочник.ИмяСправочника КАК ИмяСправочника |ГДЕ РеквизитИмя ПОДОБНО &Параметр"; МояПеременная = Найти(Запрос.Текст,""); Запрос.Текст = СокрЛ(Запрос.Текст); ПеременнаяВыбрать = Лев(Запрос.Текст,7); КонецЕсли КонецЦикла КонецЦикла КонецПроцедуры Нужно в запросе вместо строки ИмяСправочника подставить значение не использую метод СтрЗаменить()  | 
|||
| 
    8
    
        Рэйв    
     05.08.15 
            ✎
    14:43 
 | 
         
        (5)Я уже боюсь ответа на твой вопрос:-)     
         | 
|||
| 
    9
    
        dart909    
     05.08.15 
            ✎
    14:44 
 | 
         
        я сделал 2 варианта: конкатенация, СтрЗаменить() нужен третий     
         | 
|||
| 
    10
    
        magicSan    
     05.08.15 
            ✎
    14:45 
 | 
         
        StrReplace - не благодари ахахах )))     
         | 
|||
| 
    11
    
        Лодырь    
     05.08.15 
            ✎
    14:45 
 | 
         
        (9) Используй регулярки, начальник протащится     
         | 
|||
| 
    12
    
        butterbean    
     05.08.15 
            ✎
    14:45 
 | 
         
        (9) зачем???     
         | 
|||
| 
    13
    
        Euguln    
     05.08.15 
            ✎
    14:46 
 | 
         
        СтрШаблон     
         | 
|||
| 
    14
    
        dart909    
     05.08.15 
            ✎
    14:46 
 | 
         
        (12) Задание дали такое придумать 3 способ     
         | 
|||
| 
    15
    
        Лодырь    
     05.08.15 
            ✎
    14:46 
 | 
         
        (12) Просто месье знает толк в извращениях     
         | 
|||
| 
    16
    
        disla    
     05.08.15 
            ✎
    14:47 
 | 
         
        (12) наверное, очередной тест при приёме на работу     
         | 
|||
| 
    17
    
        Рэйв    
     05.08.15 
            ✎
    14:47 
 | 
         
        (7)Расстрелять....Ну что заа.....Запрос в цикле- это банально     
         | 
|||
| 
    18
    
        magicSan    
     05.08.15 
            ✎
    14:48 
 | 
         
        (17) "мои глазаааааааааа"     
         | 
|||
| 
    19
    
        Рэйв    
     05.08.15 
            ✎
    14:48 
 | 
         
        Причем студент даже .Выполнить()Забыл     
         | 
|||
| 
    20
    
        dart909    
     05.08.15 
            ✎
    14:49 
 | 
         
        (19) Я скинул часть кода.     
         | 
|||
| 
    21
    
        Рэйв    
     05.08.15 
            ✎
    14:50 
 | 
         
        (20)За такую часть могут в морду дать.     
         | 
|||
| 
    22
    
        sergeev-ag-1977    
     05.08.15 
            ✎
    14:50 
 | 
         
        Ну а что тут не понятного - суммируй текст запроса!
 
        Ничего не нужно будет менять.  | 
|||
| 
    23
    
        sergeev-ag-1977    
     05.08.15 
            ✎
    14:51 
 | 
         
        хотя это и есть "конкатенация"     
         | 
|||
| 
    24
    
        Timon1405    
     05.08.15 
            ✎
    14:51 
 | 
         
        Зачем плодить ветки? Как получить справочник из запроса не указывая его имя?
 
        Очевидно же что это тестовое задание, обойти какую-то хрень по метаданным, собрать текст запроса динамически итд. Вопрос в чем практический смысл этого бреда?  | 
|||
| 
    25
    
        sergeev-ag-1977    
     05.08.15 
            ✎
    14:53 
 | 
         
        Ну есть ещё оператор Попытка - вот он 3 вариант.     
         | 
|||
| 
    26
    
        dart909    
     05.08.15 
            ✎
    14:53 
 | 
         
        (21) окей
 
        Процедура ЗаполнитьВариантЗаменаТекста(МойСчетчик) ПроверяемыйТип = Тип("Строка"); Запрос = Новый Запрос; Для каждого Справочник Из Метаданные.Справочники Цикл Для каждого Реквизит Из Справочник.Реквизиты Цикл Если Реквизит.Тип.СодержитТип(ПроверяемыйТип) Тогда Запрос.Текст = " Выбрать |ИмяСправочника.Ссылка |ИЗ Справочник.ИмяСправочника КАК ИмяСправочника |ГДЕ РеквизитИмя ПОДОБНО Параметр"; Запрос.Текст = СтрЗаменить(Запрос.Текст,"ИмяСправочника",Справочник.имя); Запрос.Текст = СтрЗаменить(Запрос.Текст,"РеквизитИмя",Реквизит.Имя); Запрос.Текст = СтрЗаменить(Запрос.Текст,"Параметр","&СтароеЗначениеРеквизитов"); Запрос.УстановитьПараметр("СтароеЗначениеРеквизитов","%" + Объект.СтароеЗначениеРеквизитов + "%"); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий()Цикл ОбъектВыборки = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); для каждого МойРеквизит Из Справочник.Реквизиты Цикл Если МойРеквизит.Тип.СодержитТип(ПроверяемыйТип) Тогда ОбъектВыборки[МойРеквизит.Имя] = СтрЗаменить(ОбъектВыборки[МойРеквизит.Имя],Объект.СтароеЗначениеРеквизитов,Объект.НовоеЗначениеРеквизитов); МойСчетчик = МойСчетчик +1; КонецЕсли; КонецЦикла; Попытка ОбъектВыборки.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки КонецЦикла КонецЕсли КонецЦикла КонецЦикла КонецПроцедуры  | 
|||
| 
    27
    
        sergeev-ag-1977    
     05.08.15 
            ✎
    14:54 
 | 
         
        думаю тема исчерпана.     
         | 
|||
| 
    28
    
        Рэйв    
     05.08.15 
            ✎
    14:54 
 | 
         
        (26)Запрос от этого менее в цикле не стал:-)     
         | 
|||
| 
    29
    
        dart909    
     05.08.15 
            ✎
    14:55 
 | 
         
        (26) Ну да просто как избежать метода СтрЗаменить()     
         | 
|||
| 
    30
    
        magicSan    
     05.08.15 
            ✎
    14:56 
 | 
         
        (28) Кто то не прошел тест на работе и его не возьмут )))     
         | 
|||
| 
    31
    
        magicSan    
     05.08.15 
            ✎
    14:56 
 | 
         
        (28) хотя нах работу с такими идиотскими тз.     
         | 
|||
| 
    32
    
        Рэйв    
     05.08.15 
            ✎
    14:56 
 | 
         
        (29)Сижу ржу:-)     
         | 
|||
| 
    33
    
        Timon1405    
     05.08.15 
            ✎
    14:57 
 | 
         
        (30) наоборот, возьмут на сотку     
         | 
|||
| 
    34
    
        sergeev-ag-1977    
     05.08.15 
            ✎
    14:58 
 | 
         
        Ага а начальник читает мисту пойди тоже ....     
         | 
|||
| 
    35
    
        Рэйв    
     05.08.15 
            ✎
    14:58 
 | 
         
        (33)Кстати я заметил. Именно таких и берут.     
         | 
|||
| 
    36
    
        disla    
     05.08.15 
            ✎
    15:00 
 | 
         
        (0) попробуй через построитель запроса, заодно изучишь     
         | 
|||
| 
    37
    
        magicSan    
     05.08.15 
            ✎
    15:01 
 | 
         
        (29) в (6) через найти и посимвольный перебор видимо. + писали про внешние регулярки.     
         | 
|||
| 
    38
    
        xaozai    
     05.08.15 
            ✎
    15:02 
 | 
         
        В этой задаче, кстати, можно попробовать полнотекстовый поиск использовать...     
         | 
|||
| 
    39
    
        dart909    
     05.08.15 
            ✎
    15:02 
 | 
         
        (37) да попробую как в (6) спасибо)     
         | 
|||
| 
    40
    
        Рэйв    
     05.08.15 
            ✎
    15:03 
 | 
         
        (36)Ты ему еще УФ посоветуй:-))
 
        Точно пропадет надолго.  | 
|||
| 
    41
    
        dart909    
     05.08.15 
            ✎
    15:05 
 | 
         
        (40) Ничего так что что у меня УФ..     
         | 
|||
| 
    42
    
        Serg_1960    
     05.08.15 
            ✎
    15:06 
 | 
         
        (26) Запрос.Текст = "Выбрать " + Справочник.Имя + ".Ссылка...     
         | 
|||
| 
    43
    
        Рэйв    
     05.08.15 
            ✎
    15:07 
 | 
         
        (41)Ну так тем более.Советами закидаем так,что мало не покажется:-))     
         | 
|||
| 
    44
    
        Гёдза    
     05.08.15 
            ✎
    15:07 
 | 
         
        Это же задачка из универа по программированию     
         | 
|||
| 
    45
    
        magicSan    
     05.08.15 
            ✎
    15:09 
 | 
         
        (38) а заменять полнтекстовой з аменой7 )))     
         | 
|||
| 
    46
    
        Timon1405    
     05.08.15 
            ✎
    15:09 
 | 
         
        (44) Курсовая или дипломная?     
         | 
|||
| 
    47
    
        xaozai    
     05.08.15 
            ✎
    15:10 
 | 
         
        (45) Просто присваиванием.     
         | 
|||
| 
    48
    
        xaozai    
     05.08.15 
            ✎
    15:12 
 | 
         
        Хотя, если там только часть значения реквизита надо менять, то без замены (как бы она не была реализована) не обойтись, конечно...     
         | 
|||
| 
    49
    
        Злобный монстр    
     05.08.15 
            ✎
    15:21 
 | 
         
        в консолидации много таких конструкций:
 
        Запрос.Текст = Запрос.Текст + " | | И Справочник.ПорядковыйНомер " + ?(НаправлениеВверх,"<",">") + " &ПорядковыйНомер | |УПОРЯДОЧИТЬ ПО | ПорядковыйНомер" + ?(НаправлениеВверх," УБЫВ","");  | 
|||
| 
    50
    
        Злобный монстр    
     05.08.15 
            ✎
    15:29 
 | 
         
        Кстати оттуда же из общего модуля:
 
        Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Справочник.ПорядковыйНомер КАК ПорядковыйНомер, | Справочник.Ссылка КАК Ссылка |ИЗ | Справочник."+ ИмяСправочника + " КАК Справочник |ГДЕ | Не Справочник.ПометкаУдаления"; Если Не ТекущийЭлемент.Владелец = Неопределено Тогда Запрос.Текст = Запрос.Текст + " | И Справочник.Владелец = &Владелец"; КонецЕсли; Для каждого КлючИЗначение Из Новый Структура(ИмяРеквизитовРодителя) Цикл Запрос.Текст = Запрос.Текст + " |И Справочник." + КлючИЗначение.Ключ + " = &" + КлючИЗначение.Ключ; Запрос.УстановитьПараметр(КлючИЗначение.Ключ, ТекущийЭлемент[КлючИЗначение.Ключ]); КонецЦикла;  | 
|||
| 
    51
    
        disla    
     05.08.15 
            ✎
    15:57 
 | 
         
        (50) дык это и есть конкатенация, о чём было написано в (9), нужен третий способ.     
         | 
|||
| 
    52
    
        Злобный монстр    
     05.08.15 
            ✎
    16:02 
 | 
         
        (51) Извиняй, только начало прочитал.     
         | 
|||
| 
    53
    
        sash-ml    
     05.08.15 
            ✎
    16:28 
 | 
         
        RegExp = Новый COMОбъект("VBScript.RegExp");
 
        RegExp.Pattern = "Петя"; RegExp.IgnoreCase = Истина; ИсходнаяСтрока = "ПетЯ 123"; Результат = RegExp.Replace(ИсходнаяСтрока, "Вася");  | 
|||
| 
    54
    
        Asmody    
     05.08.15 
            ✎
    16:34 
 | 
         
        В коде Мисты можно обнаружить вот такой перл:
 
        function str_replace(txt,cut_str,paste_str){ return txt.split(cut_str).join(paste_str); }  | 
|||
| 
    55
    
        SUA    
     05.08.15 
            ✎
    16:38 
 | 
         
        результат = "";
 
        пока найти(исходная, заменяемая)>0 цикл результат = результат + лев(исходная,найти(исходная, заменяемая)-1)+замена;исходная=сред(исходная,найти(исходная,заменяемая)+стрдлина(заменяемая)); конеццикла; результат=результат+заменяемая;  | 
|||
| 
    56
    
        SUA    
     05.08.15 
            ✎
    16:39 
 | 
         
        скучно...     
         | 
|||
| 
    57
    
        disla    
     05.08.15 
            ✎
    22:40 
 | 
         
        (55) ещё один, не знает, что такое конкатенация, см. (9)     
         | 
|||
| 
    58
    
        disla    
     05.08.15 
            ✎
    22:42 
 | 
         
        (0) ну что, взяли на работу?     
         | 
|||
| 
    59
    
        sash-ml    
     06.08.15 
            ✎
    09:47 
 | 
         
        Из извращенных методов можно еще как-то так
 
        ТД = Новый ФорматированныйДокумент ; ТД.Добавить("Выбрать первые 100 * |из справочник."); ТД.Добавить("Номенклатура "); ТД.Добавить(" где |Истина"); Запрос = Новый Запрос; Запрос.Текст = Тд.ПолучитьТекст(); ТЗ = Запрос.Выполнить().Выгрузить();  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |