【发布时间】:2010-09-21 19:43:36
【问题描述】:
我有一个包含使用此语法的参数的文件
RANGE {<value> | <value>-<value>} [ , ...]
value 是数字。
例如,所有这些都是有效的语法
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? >
}
}
我需要帮助来解析数字。对于解析,我能想到的一种方法是使用连续拆分(
-、,和)。有没有更好的(干净优雅,可能使用正则表达式?)方式?此外,欢迎对整体程序结构提出 cmets/建议。
【问题讨论】:
-
打开输入文件进行写入可能是一个糟糕的第一步;)
-
由于
<fh>,您的代码也将无法运行,需要将其更改为<$fh>。