|
Есть ли в 1С макроподстановка | ☑ | ||
---|---|---|---|---|
0
Azgerd
20.02.13
✎
15:48
|
Есть переменная: ИмяКлиента = "ООО Рога и копыта"
Есть строка: Строка = "ттттт [ИмяКлиента] тттттт" Как можно в Строке изменить подстроку "ИмяКлиента" на значение переменной ИмяКлиента, чтобы вместо "ттттт [ИмяКлиента] тттттт" получилось "ттттт ООО Рога и копыта тттттт". |
|||
1
SerMaxim
20.02.13
✎
15:48
|
нет. плохая система... и главное недокументированная...
|
|||
2
artems
20.02.13
✎
15:50
|
СтрЗаменить (StrReplace)
Синтаксис: СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) Параметры: <Строка> (обязательный) Тип: Строка. Исходная строка. <ПодстрокаПоиска> (обязательный) Тип: Строка. Искомая подстрока. <ПодстрокаЗамены> (обязательный) Тип: Строка. Подстрока, на которую будет заменена подстрока поиска. Возвращаемое значение: Тип: Строка. Строка, полученная в результате замены. Описание: Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. |
|||
3
fmrlex
20.02.13
✎
15:51
|
(0) Ты на ассемблере до этого херачил? ))
|
|||
4
artems
20.02.13
✎
15:52
|
(0) За год СП можно было бы и изучить :)
|
|||
5
Azgerd
20.02.13
✎
15:56
|
Как заменить подстроку я знаю. Я сначала не догнал как из строки "ИмяКлиента" получить значение переменной ИмяКлиента,
вопрос решён: Вычислить("ИмяКлиента") = "ООО Рога и копыта". Спасибо. |
|||
6
dmpl
20.02.13
✎
15:58
|
(5) А зачем ты создавал строку "ИмяКлиента"?
|
|||
7
shamannk
20.02.13
✎
15:58
|
Строка = "ттттт"+ ИмяКлиента]+ "тттттт";
Так? |
|||
8
shamannk
20.02.13
✎
15:59
|
(7) + Без скопки ]
|
|||
9
badboychik
20.02.13
✎
16:02
|
если прикрутить регулярные выражения то можно воопще парсить любые строки в которых встречаются объявленные ранее переменные
|
|||
10
badboychik
20.02.13
✎
16:04
|
в 7.7 была функция Шаблон(), в восьмерке такой нету, печалька ((
|
|||
11
Azgerd
20.02.13
✎
16:05
|
[ИмяКлиента] в скобках я создал, чтобы относительно них из текста вырезать переменные. Например "Договор с [ИмяКлиента] от лица [ДолжностьРуководителя]" и т.д.
|
|||
12
Azgerd
20.02.13
✎
16:06
|
badboychik - а что значит "прикрутить регулярные выражения"?
|
|||
13
badboychik
20.02.13
✎
16:10
|
ну вот есть у тебя строка
Ст = "Договор с #ИмяКлиента от лица #ДолжностьРуководителя" ты говоришь (языком 1С) - все выражения по шаблону "#(\w+)" заменить на "Вычислить(Х.Replace(Ст,"$1"))" |
|||
14
pumbaEO
20.02.13
✎
16:10
|
ОбщийМодуль.СтроковыеФункцииКлиентСервер
// Подставляет параметры в строку. Максимально возможное число параметров - 9. // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // // Параметры: // СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); // Параметр<n> - Строка - подставляемый параметр. // // Возвращаемое значение: // Строка – текстовая строка с подставленными параметрами. // // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". // Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт Если СтрокаПодстановки = Неопределено ИЛИ СтрДлина(СтрокаПодстановки) = 0 Тогда Возврат ""; КонецЕсли; Результат = ""; НачПозиция = 1; Позиция = 1; Пока Позиция <= СтрДлина(СтрокаПодстановки) Цикл СимволСтроки = Сред(СтрокаПодстановки, Позиция, 1); Если СимволСтроки <> "%" Тогда Позиция = Позиция + 1; Продолжить; КонецЕсли; Результат = Результат + Сред(СтрокаПодстановки, НачПозиция, Позиция - НачПозиция); Позиция = Позиция + 1; СимволСтроки = Сред(СтрокаПодстановки, Позиция, 1); Если СимволСтроки = "%" Тогда Позиция = Позиция + 1; НачПозиция = Позиция; Результат = Результат + "%"; Продолжить; КонецЕсли; Попытка НомерПараметра = Число(СимволСтроки); Исключение ВызватьИсключение НСтр("ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + СимволСтроки); КонецПопытки; Если СимволСтроки = "1" Тогда ЗначениеПараметра = Параметр1; ИначеЕсли СимволСтроки = "2" Тогда ЗначениеПараметра = Параметр2; ИначеЕсли СимволСтроки = "3" Тогда ЗначениеПараметра = Параметр3; ИначеЕсли СимволСтроки = "4" Тогда ЗначениеПараметра = Параметр4; ИначеЕсли СимволСтроки = "5" Тогда ЗначениеПараметра = Параметр5; ИначеЕсли СимволСтроки = "6" Тогда ЗначениеПараметра = Параметр6; ИначеЕсли СимволСтроки = "7" Тогда ЗначениеПараметра = Параметр7; ИначеЕсли СимволСтроки = "8" Тогда ЗначениеПараметра = Параметр8; ИначеЕсли СимволСтроки = "9" Тогда ЗначениеПараметра = Параметр9; Иначе ВызватьИсключение НСтр("ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + ЗначениеПараметра); КонецЕсли; Если ЗначениеПараметра = Неопределено Тогда ЗначениеПараметра = ""; Иначе ЗначениеПараметра = Строка(ЗначениеПараметра); КонецЕсли; Результат = Результат + ЗначениеПараметра; Позиция = Позиция + 1; НачПозиция = Позиция; КонецЦикла; Если (НачПозиция <= СтрДлина(СтрокаПодстановки)) Тогда Результат = Результат + Сред(СтрокаПодстановки, НачПозиция, СтрДлина(СтрокаПодстановки) - НачПозиция + 1); КонецЕсли; Возврат Результат; КонецФункции |
|||
15
badboychik
20.02.13
✎
16:11
|
и в Ст уже лежит результат
|
|||
16
Serg_1960
20.02.13
✎
16:17
|
||||
17
dmpl
20.02.13
✎
16:21
|
(11) И где это потом используется?
|
|||
18
badboychik
20.02.13
✎
16:33
|
(13) эх не сработает так, надо сначала найти все элементы реглярным выражением а потом в цикле заменять название на значение
|
|||
19
badboychik
20.02.13
✎
17:02
|
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.Pattern = "@([А-я\d]+)"; RegExp.Global = Истина; Имя="Вася"; Фамилия ="Иванов"; Представление = "Меня зовут @Фамилия Имя"; Совпадения = RegExp.Execute(Представление); Для Эл=0 по Совпадения.Count()-1 Цикл Шаблон = Совпадения.Item(Эл).Value; Переменная = Совпадения.Item(Эл).Submatches().Item(0); Представление = СтрЗаменить(Представление,Шаблон,Вычислить(Переменная)); Конеццикла; Сообщить(Представление); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |