Имя: Пароль:
1C
 
Работа со строками.
,
0 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+ """");
        Прервать;
    КонецЦикла;
6 AlexKulikov
 
16.10.17
14:24
(3)  у меня строка формируется без пробелов, это я так коряво написал для наглядности, поэтому к сожалению Ваш вариант не подойдет. Входную строку я менять не имею права.

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

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

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

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

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

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

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

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

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

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

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

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

На данный момент, у меня обрабатывается только строки вида "1425,00".
10 Timon1405
 
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) ты просто не умеешь их готовить
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.