2015-06-26 7 views
0

У меня есть файл YAML в качестве входных данных. Во входном файле у меня есть строки продаж и продаж ($). Мне нужно взять только одну строку в качестве вывода.
Логика:Perl-скрипт для пропуска строки

  1. если продажи строки ($) присутствует, то мы должны взять эту строку.
  2. Если присутствуют как продажи ($), так и ряды продаж, нам нужна строка продаж ($).
  3. Если строка продаж присутствуют, то нам нужны продажи строка. (Только если продажи строка присутствует)

Может кто-нибудь руководство, как достичь этого Perl 5?

Моего Входной файл выглядит как ...

--- 
Order ID: W00875205405667 
Sales($): '7.5' 
Transaction Datetime: 2015-03-29 16:17:00 
--- 
Order ID: W00875205405668 
Sales: '74.50' 
Sales($): '72.5' 
Transaction Datetime: 2015-03-29 16:17:00 
--- 
Order ID: W00875205405669 
Sales: '12.50' 
Transaction Datetime: 2015-03-29 16:17:00 
--- 

нужен выходной файл как:

--- 
Order ID: W00875205405667 
Sales: '7.5' 
Transaction Datetime: 2015-03-29 16:17:00 
--- 
Order ID: W00875205405668 
Sales: '72.50' 
Transaction Datetime: 2015-03-29 16:17:00 
--- 
Order ID: W00875205405669 
Sales: '12.50' 
Transaction Datetime: 2015-03-29 16:17:00 
--- 
+2

Вы не 'продаж ($) и' продаж() 'строки в любой части этого YAML файла, как ключи картографирования YAML чувствительны к регистру. FWIW у вас даже нет 'Sales' ** или **' Sales ($) 'во всех них, так как последний документ в этом файле состоит только из Null-скаляра. Вы бы узнали и сделаете одолжение, используя правильный анализ YAML (на Perl или на любом языке). Использование regex не подходит для YAML, как и для HTML/XML/JSON/CSV. – Anthon

ответ

1

Вы могли бы предпочтение продажи ($) и использования только одного захвата буфер
с конструкцией сброса филиала (?|,,)

# /(?m)^Order\h+ID:\h*(.*)\s+(?|(?:^.*\s+)?^Sales\(\$\):\h*(.*)\s+|^Sales:\h*(.*)\s+)^Transaction\h+Datetime:\h*(.*)/ 

(?m) 
^ Order \h+ ID: \h* 
(.*)      # (1) 
\s+ 
(?| 
     (?:^.* \s+)? 
    ^Sales\(\$\): \h* 
     (.*)      # (2) 
     \s+ 
    | 
    ^Sales: \h* 
     (.*)      # (2) 
     \s+ 
) 
^ Transaction \h+ Datetime: \h* 
(.*)      # (3) 

Выход:

** Grp 0 - (pos 0 , len 85) 
Order ID: W00875205405667 
Sales($): '7.5' 
Transaction Datetime: 2015-03-29 16:17:00 
** Grp 1 - (pos 10 , len 15) 
W00875205405667 
** Grp 2 - (pos 37 , len 5) 
'7.5' 
** Grp 3 - (pos 66 , len 19) 
2015-03-29 16:17:00 

------------------- 

** Grp 0 - (pos 92 , len 102) 
Order ID: W00875205405668 
Sales: '74.50' 
Sales($): '72.5' 
Transaction Datetime: 2015-03-29 16:17:00 
** Grp 1 - (pos 102 , len 15) 
W00875205405668 
** Grp 2 - (pos 145 , len 6) 
'72.5' 
** Grp 3 - (pos 175 , len 19) 
2015-03-29 16:17:00 

------------------- 

** Grp 0 - (pos 201 , len 84) 
Order ID: W00875205405669 
Sales: '12.50' 
Transaction Datetime: 2015-03-29 16:17:00 
** Grp 1 - (pos 211 , len 15) 
W00875205405669 
** Grp 2 - (pos 235 , len 7) 
'12.50' 
** Grp 3 - (pos 266 , len 19) 
2015-03-29 16:17:00 
Смежные вопросы