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


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

Работа со строками.
Я
   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) ты просто не умеешь их готовить

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