LINUX.ORG.RU

Perl - разбор интервалов


0

0

Здравствуйте, Есть ли в Perl готовые решения для реализации преобразования 1-3,7,9 = 1,2,3,7,9 1-3,5,12-14 = 1,2,3,5,12,13,14 Если есть, заранее танкс за примерчик.

anonymous

тут писать-то...

#!/usr/bin/perl

use strict;
use warnings;

our $in = '1-3,5,12-14';
our @out;

our @nums = split ',',$in;

foreach (@nums) {
	if (/(\d+)-(\d+)/) {
		for ($1..$2) {
			push @out,$_;
		}
	} else {
		push @out,$_;
	}
}
print join ',',@out;

friday ★★★
()
Ответ на: комментарий от friday

Тот же алгоритм, что у friday но IMHO более в perl стиле:

#!/usr/bin/perl -w

use strict;

my $in = '1-3,5,100-110, 115, 12-14';
my @out;

@out = map { /(\d+)-(\d+)/ ? $1..$2 : $_}
       split ',',  $in;


Onanim
()
Ответ на: комментарий от Onanim

Вот вариант еще покороче (и заодно игнорирующий пробелы):

#!/usr/bin/perl -w

use strict;

my $in = '1-3, 5, 100  -  110, 115 , 12-14 ';

$in =~ s/-/../g;
my @out = eval "($in)";
$@ and die "eval ($in): $@\n";  # проверочка не помешает ;-)

Onanim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.