Вход | Регистрация

1С:Предприятие ::

Метки: 

Работа со строками.

Я
   AlexKulikov
 
16.10.17 - 13:51
Добрый день, уважаемые форумчане.

Подскажите пожалуйста, как мне решить следующую задачу.

Есть строка, например: Яблоко, Апельсин, Грузовик, 1247587, "1425,00", Улица, Фонарь, Аптека.

С помощью типовой функции, где разделителем у меня выступает "," -  я формирую массив подстрок, который я потом заношу в таблицу значений.
<code>
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт
</code>

Вопрос, как мне обработать строку, чтобы у меня получалась одна подстрока вида "1425,00"?

Очень надеюсь на Вашу помощь, с уважением Алексейю
 
 
   Ёпрст
 
1 - 16.10.17 - 13:54
(0) в качестве разделителя указывай ", "
   Лефмихалыч
 
2 - 16.10.17 - 13:54
\"(\d+\,\d+)\"
   Ёпрст
 
3 - 16.10.17 - 13:54
зпт+пробел, короче
   Волшебник
 
Модератор
4 - 16.10.17 - 13:54
с помощью регулярного выражения замени "  ,  " (запятая внутри кавычек) на #,#

затем разложить в массив подстрок
и затем обратная замена #,# на ,
   Лефмихалыч
 
5 - 16.10.17 - 13:58
RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = истина;
    RegExp.Global = Истина;
    RegExp.MultiLine = истина;    
    RegExp.Pattern = "\"(\d+\,\d+)\"";
    Matches= RegExp.Execute("Яблоко, Апельсин, Грузовик, 1247587, ""1425,00"", Улица, Фонарь, Аптека.");
    
    Для Сч = 0 по Matches.Count()-1 Цикл
        Match = Matches.Item(Сч);
        Сообщить("""" + Match.Value+ """");
        Прервать;
    КонецЦикла;
   AlexKulikov
 
6 - 16.10.17 - 14:24
(3)  у меня строка формируется без пробелов, это я так коряво написал для наглядности, поэтому к сожалению Ваш вариант не подойдет. Входную строку я менять не имею права.

(5) Ругается на строчку

RegExp.Pattern = "\"(\d+\,\d+)\"" - не опознанный оператор.

Спасибо за код, мне теперь есть с чем работать).

(4) (5) За наводку на "регулярные выражения" спасибо большое. Буду пробовать.
   AlexKulikov
 
7 - 16.10.17 - 16:25
С цифрами разобрался, спасибо большое за помощь!

Сейчас мучаюсь со следующей строкой:
"Коррекция 'Проживание' от 30.04 - трансфер на счет ОЛТА Групп, 84526, 28/04/17 ИРИНА УСЕНКО УЖИНЫ!!!!"

Соответственно, если строчка помещена в кавычки то это одна подстрока.
Пытаюсь по аналогии с цифрами вместо "," - поставить "." , а потом уже функцией разбить на массив подстрок.

Использую вот такое регулярное выражение:

RegExp.Pattern = "(\w+\,\w+)\""";

Где \w насколько я понял, означает любой символ, то есть в моем случае это любая последовательность символов до запятой и после (включая цифры).
Но к моему огромному сожалению, данный паттерн обрабатывает только цифры.
Подскажите пожалуйста, в чем я ошибся?
   Timon1405
 
8 - 16.10.17 - 16:48
(7) что хотите из строки извлечь?
   AlexKulikov
 
9 - 16.10.17 - 17:00
Есть строка, например:

Яблоко, Апельсин, Грузовик, 1247587, "1425,00", Улица, Фонарь,"Коррекция 'Проживание' от 30.04 - трансфер на счет ОЛТА Групп, 84526, 28/04/17 ИРИНА УСЕНКО УЖИНЫ!!!!", Аптека.

Я хотел бы получить следующее, что если у меня в строке встречаются строки выделенные "", в данном случае это ("1425,00" и "Коррекция 'Проживание' от 30.04 - трансфер на счет ОЛТА Групп, 84526, 28/04/17 ИРИНА УСЕНКО УЖИНЫ!!!!") то в них я меняю "," на "." 

Дальше применяю функцию:
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт 

На данный момент, у меня обрабатывается только строки вида "1425,00".
   Timon1405
 
10 - 16.10.17 - 17:16
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = истина;
RegExp.Global = Истина;
RegExp.MultiLine = истина;    
RegExp.Pattern = """[^""]+""";
ВходСтрока = "Яблоко, Апельсин, Грузовик, 1247587, ""1425,00"", Улица, Фонарь,""Коррекция 'Проживание' от 30.04 - трансфер на счет ОЛТА Групп, 84526, 28/04/17 ИРИНА УСЕНКО УЖИНЫ!!!!"", Аптека.";

Matches= RegExp.Execute(ВходСтрока);
а =Matches.Count();
Для Сч = 0 по Matches.Count()-1 Цикл
    Match = Matches.Item(Сч);
    Сообщить("" + Match.Value);
КонецЦикла;
Дальше справитесь?
 
 Рекламное место пустует
   Лефмихалыч
 
11 - 16.10.17 - 19:08
(6) надо голову в розетку включить и пересчитать кавычки
   Сияющий в темноте
 
12 - 16.10.17 - 21:15
прощетнаписать парсер,который будет понимать разные кпвычки,чем пытаться мучать регэкспы,есть случаи,когда последние только всё усложняют
   Лефмихалыч
 
13 - 16.10.17 - 21:32
(12) ты просто не умеешь их готовить


Список тем форума
Рекламное место пустует Рекламное место пустует
Независимо от того, куда вы едете — это в гору и против ветра!
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует