|
Аналог методу СтрЗаменить() | ☑ | ||
---|---|---|---|---|
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 * |из справочник."); ТД.Добавить("Номенклатура "); ТД.Добавить(" где |Истина"); Запрос = Новый Запрос; Запрос.Текст = Тд.ПолучитьТекст(); ТЗ = Запрос.Выполнить().Выгрузить(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |