![]() |
|
Регулярные Выражения 1С | ☑ | ||
---|---|---|---|---|
0
IVLeontev
20.09.19
✎
13:39
|
Добрый день.
Возникла сложность с регулярными выражениями 1с. Есть строка: "MAIN"",""100002"",""RES"","""",""1,92". Не могу понять, как её разбить на массив по шаблону "," - то есть мне нужно, чтобы в массив попали подстроки :MAIN, 100002, RES, (пустая строка), 1,92. Пробовал использовать СтрРазделить(Строка, """,""",Истина), но в массив летит куча пустых кавычек. Подскажите, пожалуйста, в каком направлении искать ответ, если эта задача разрешима. |
|||
1
Волшебник
20.09.19
✎
13:41
|
сначала снеси все кавычки
стр = СтрЗаменить(стр, """", ""); |
|||
2
trooba
20.09.19
✎
13:43
|
(0) Во всех стандартных есть "РазложитьСтрокуВМассивПодстрок()"
|
|||
3
unenu
20.09.19
✎
13:44
|
(2) - это стандарты прошлого века, а тс уже живет в 21-м и безрезультатно использует системный аналог
СтрРазделить(Строка, """,""",Истина) |
|||
4
trooba
20.09.19
✎
13:44
|
(0) // Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.
// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы, // рекомендуется использовать функцию платформы СтрРазделить. // // Параметры: // Значение - Строка - текст с разделителями; // Разделитель - Строка - разделитель строк текста, минимум 1 символ; // ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. // Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: // - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки // включаются в результат; // - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в // случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а // при других разделителях результатом функции будет пустой массив. // СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. // // Возвращаемое значение: // Массив - массив строк. // // Пример: // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") // - возвратит массив из 5 элементов, три из которых - пустые: "", "один", "", "два", ""; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) // - возвратит массив из двух элементов: "один", "два"; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(" один два ", " ") // - возвратит массив из двух элементов: "один", "два"; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("") // - возвратит пустой массив; // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("",,Ложь) // - возвратит массив с одним элементом: ""(пустая строка); // СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("", " ") // - возвратит массив с одним элементом: "" (пустая строка). // Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт Если Разделитель = "," И ПропускатьПустыеСтроки = Неопределено И СокращатьНепечатаемыеСимволы Тогда Результат = СтрРазделить(Значение, ",", Ложь); Для Индекс = 0 По Результат.ВГраница() Цикл Результат[Индекс] = СокрЛП(Результат[Индекс]) КонецЦикла; Возврат Результат; КонецЕсли; Результат = Новый Массив; // Для обеспечения обратной совместимости. Если ПропускатьПустыеСтроки = Неопределено Тогда ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); Если ПустаяСтрока(Значение) Тогда Если Разделитель = " " Тогда Результат.Добавить(""); КонецЕсли; Возврат Результат; КонецЕсли; КонецЕсли; // Позиция = СтрНайти(Значение, Разделитель); Пока Позиция > 0 Цикл Подстрока = Лев(Значение, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда Если СокращатьНепечатаемыеСимволы Тогда Результат.Добавить(СокрЛП(Подстрока)); Иначе Результат.Добавить(Подстрока); КонецЕсли; КонецЕсли; Значение = Сред(Значение, Позиция + СтрДлина(Разделитель)); Позиция = СтрНайти(Значение, Разделитель); КонецЦикла; Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда Если СокращатьНепечатаемыеСимволы Тогда Результат.Добавить(СокрЛП(Значение)); Иначе Результат.Добавить(Значение); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции |
|||
5
trooba
20.09.19
✎
13:46
|
(3) Ну, тоды, Ой.
|
|||
6
unenu
20.09.19
✎
13:47
|
(4) (5) не ой, а "Разделитель может иметь любую длину." в стандарте прошлого века, что может ему как раз на руку.
|
|||
7
IVLeontev
20.09.19
✎
13:49
|
Спасибо, сейчас буду пробовать.
|
|||
8
trooba
20.09.19
✎
13:51
|
(6) Откуда знаешь? В 1 кабинете сидите?
|
|||
9
IVLeontev
20.09.19
✎
14:32
|
РазложитьСтрокуВМассивПодстрок помогла, спасибо еще раз.
|
|||
10
sikuda
20.09.19
✎
15:23
|
(9) Вот не надо боли - " с регулярными выражениями 1с". В 1С нет регулярных выражений или они прикручиваются вручную RegExp = Новый COMОбъект("VBScript.RegExp");
Называйте вещи своими именами - функции работы со строками! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |