Обработка столбцов данных с помощью Perl - PullRequest
0 голосов
/ 25 июля 2011

Я хочу разделить столбцы и получить данные с помощью регулярного выражения. ищем более простое решение с использованием обратных ссылок.

previous balance payments adjustments charges payment without fine payment with fine

20,251.97 - 0.00 - 0.00 + 53,391.67 = 73,643.64 74,393.64

Вот код

#!/usr/bin/perl
use strict;

my $regex = qr/^(\d|-)?(\d|,)*\.?\d*$/;
my $data = "20,251.97                   -          0.00              -           0.00              +         53,391.67            =         73,643.64                74,393.64"

Ответы [ 2 ]

8 голосов
/ 25 июля 2011

Почему бы вам просто не воспользоваться функцией split?

my @fields = split(/ +/, $data);
0 голосов
/ 25 июля 2011

Все ваши номера имеют общий формат. Вы можете написать только одно регулярное выражение, которое работает, чтобы захватить любое из ваших чисел. Затем составьте более длинное регулярное выражение, соответствующее вашим записям.

Преимущество этого метода перед разделением заключается в том, что вы можете запросить предупреждение, если ваши данные не соответствуют ожидаемому формату.

my $num = qr{
    \s*          # skip whitespace
    (            # begin capture
        [\d,.]+  # comma, period, digits
    )            # end capture
    \s*          # skip whitespace
}x;

my (
    $prev_bal, $pmts_received, $adjustments, $charges, 
    $pmt_without_fine, $pmt_with_fine
) = $data =~ /$num \- $num \- $num \+ $num = $num $num/x
    or warn "Unexpected format: $data\n"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...