Найти значение в строке
Теги: 1С

# Примечания

- если вы смогли получили массив, то почему бы не взять элемент массива с индексом 1, и сделать с ним нечто такое:
Результат = СтрЗаменить(МассивСлов[1], "uin=", "");
Ну это при условии, что местоположение реквизита uin всегда будет таким

- (1) SDV, в этом и дело что меняет, я же написал об этом, он может быть и 11 индексом и 2. Либо придётся под каждое условие делать, их более 5, но с точки зрения производительности думаю не корректно так будет. По этому думаю можно как то с массивом или со строкой поработать что бы получить требуемое значение.

- (2) Washington, при условии что имена реквизитов уникальны и совместимы с именами переменных 1С я бы преобразовал массив в структуру и с ним бы уже работал:
Структура = Новый Структура;

Для каждого ЭлементМассива из Массив Цикл
	ПозицияРазделителя = Найти(ЭлементМассива,"=");
	Ключ = Лев(ЭлементМассива, ПозицияРазделителя - 1);
	Значение = Сред(ЭлементМассива, ПозицияРазделителя + 1);
	Структура.Вставить(Ключ, Значение);
КонецЦикла

- (2) Washington, ну или вот такие извращения:
Результат = Лев(Сред(Строка, Найти(Строка,"uin=") + 4), Найти(Сред(Строка, Найти(Строка,"uin=") + 4),"|")-1);

- Функция ЗначениеUIN (Знач ВхДанные)
	
	Старт = СтрНайти(ВхДанные, "uin=");
	ВхДанные = Сред(ВхДанные, Старт +4);
	Финиш = СтрНайти(ВхДанные, "|");
	Возврат Сред(ВхДанные, 1, Финиш-1);
	
КонецФункции

- Вариант через регулярное выражение
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Истина;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
RegExp.Pattern = "uin=(\d+)";

ПроверяемаяСтрока = "355035|uin=18810150201111703544|TechCode=03|ruleId=18810150201111703544|quittDate=11.11.2020|";

Matches=RegExp.Execute(ПроверяемаяСтрока);

Если Matches.Count > 0 Тогда
	SubMatch = Matches.Item(0);
	uin = SubMatch.SubMatches.Item(0);
	Сообщить("uin: " + uin);
КонецЕсли;

- (6) bolsun, Этот вариант намного лучше работает и быстрее и меньше кода . вот только вопрос , какое регулярное выражение , тоесть шаблон , что бы получить дату ? |quittDate=11.11.2020|

- (7) Washington, Спасибо , сам разобрался шаблон для даты (\d{2}(.|/)\d{2}(.|/)\d{4})

- Функция ИзСтрокиВМассив(НачальнаяСтрока,Разделитель) Экспорт
	
	СтрокаПреобразованнаяВМногострочныйТекст     = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
	ТекстовыйДокументИзСтроки                    = Новый ТекстовыйДокумент;
	Результат                                    = Новый СписокЗначений;
	ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
	Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
		Результат.Добавить(СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок)));
	КонецЦикла;
	Возврат Результат;
	
КонецФункции

Из массива дергай че хочешь !
Второй вариант
Функция мРазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель ) Экспорт
	
	//   МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр,Разделитель);
			
			Если Поз = 0 Тогда
				СтрокаВМассив = СокрЛП(Стр);
				
				//   МассивСтрок.Добавить(СтрокаВМассив);
				Возврат СтрокаВМассив;
			КонецЕсли;
			
			СтрокаВМассив = СокрЛП(Лев(Стр,Поз-1));
			
			// МассивСтрок.Добавить(СтрокаВМассив);
			Стр = СокрЛ(Сред(Стр,Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр,Разделитель);
			
			//Если Поз = 0 Тогда
			СтрокаВМассив = СокрЛП(Стр);
			
			//    МассивСтрок.Добавить(СтрокаВМассив);
			//Возврат СтрокаВМассив;
			//КонецЕсли;
			
			СтрокаВМассив = СокрЛП(Лев(Стр,Поз-1));
			
			// МассивСтрок.Добавить(СтрокаВМассив);
			//Стр = Сред(Стр,Поз+ДлинаРазделителя);
			Возврат СтрокаВМассив;
			
			
		КонецЦикла;
	КонецЕсли;
	
КонецФункции

- Поместить массив в ТЗ, а затем искать через .Найти или .

- (6) bolsun, из пушки по воробьям. p.s. А если клиент на Linux?

- (11) Little Friend, в техзадании про Linux ничего не сказано ))
а вообще написал же, что это один из вариантов.