[Moscow.pm] Парсинг текстовой строки

Alexander Lourier aml на rulezz.ru
Чт Ноя 6 05:51:38 PST 2008


В сообщении от Четверг 06 ноября 2008 Павел Тимонин написал(a):

> работа единичная, то есть эти скрипты будут запускаться примерно раз в
> неделю. так что быстродействие и оптимизированность в общем-то не
> требуется, гораздо важнее наглядность кода, чтоб я мог в нём разобраться :)
>
> можете подсказать что-нибудь?

#!/usr/bin/perl

use strict;

my %single = (
	'катушки' => 'катушка',
	'бухты' => 'бухта',
);

while (<>) {

	chomp;

	for my $entry (split /, /) {

		if (my ($amount, $unit_name, $unit_size) = ($entry =~ /^\s*(\d+|\d+,\d+|
\d+\.\d+)\s*\((.+)\s+по\s+(\d+)\s*м\s*\)\s*$/)) {

			$amount =~ s/,/./;

			my $units = $amount * 1000 / $unit_size;

			if ($units != int($units)) {

				warn "$entry: дробное число единиц\n";
			}

			my $out_line = ($unit_size / 1000) . ' ' . ($single{$unit_name} || 
$unit_name) . "\n";

			for (my $i = 0; $i < $units; $i++) {

				print $out_line;
			}

		} else {

			warn "$entry: неизвестный формат\n";
		}
	}
}

В аттаче он же с сохранением форматирования.

-- 
Alexander Lourier, http://aml.rulezz.ru
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: c.pl
Type: application/x-perl
Size: 706 bytes
Desc: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081106/b6a2a66b/attachment.bin>


Подробная информация о списке рассылки Moscow-pm