У меня есть файл, который содержит параметры, использующие этот синтаксис
RANGE {<value> | <value>-<value>} [ , ...]
, где value
s - это числа. Например,
, все это действительный синтаксис
RANGE 34
RANGE 45, 234
RANGE 2-99
RANGE 3-7, 15, 16, 2, 54
Как я могу проанализировать значения в массиве в Perl?
Например, для последнего примера я хочу, чтобы мой массив имел 3, 4, 5, 6, 7, 15, 16, 2, 54
.Порядок элементов не имеет значения.
Самый простой способ - проверить наличие символа -
, чтобы определить, существует ли диапазон или нет, проанализировать диапазон с помощью цикла и затем проанализироватьостальные элементы
my @arr;
my $fh, "<", "file.txt" or die (...);
while (<$fh>) {
if ($_ =~ /RANGE/) {
if ($_ =~ /-/) { # parse the range
< how do I parse the lower and upper limits? >
for($lower..$upper) {
$arr[++$#arr] = $_;
}
} else { # parse the first value
< how do I parse the first value? >
}
# parse the rest of the values after the comma
< how do I parse the values after the comma? >
}
}
Мне нужна помощь в разборе чисел. Для разбора я могу думать только о том, чтобы использовать последовательные разбиения (на -
, ,
и
).Есть ли какой-нибудь лучший (чистый и элегантный способ использования регулярных выражений?)
Также приветствуются комментарии / предложения по общей структуре программы.