【发布时间】:2018-06-06 05:23:28
【问题描述】:
我有一个格式如下的文件
locale,English,en_AU,6251
locale,French,fr_BE,25477
charmap,English,EN,5423
我想使用 perl 打印出带有选项“-a”的文件,并输出类似的东西
Available locales:
en_Au
fr_BE
EN
为此,我有下面的 perl 脚本
$o = $ARGV[0];
$f = $ARGV[1];
open (INFILE, "<$f") or die "error";
my $line = <INFILE>;
my @fields = split(',', $line);
if($o eq "-a"){
if(!$fields[2]){print "No locales available\n";}
else{print "Available locales: \n";
while($fields[2]){print "$fields[2]\n";}
}
}
close(INFILE);
我在这里有三个问题。 1. 我的脚本将永远只打印第一个语言环境“en_Au”。 2.它应该能够测试一个文件是否为空,但是如果一个文件是纯空的,它什么也不输出,但是如果我在文件中输入两个空行,它会打印两行“没有可用的语言环境”。 3.事实上,在 (!$filed[2]) 部分,我应该验证文件是否为空或不存在可用的语言环境,如果是,我是否需要在此处放置一些正则表达式来验证它是否也是语言环境? ? 希望有人能帮我弄清楚这些!非常感谢!!!
【问题讨论】:
-
代码只读取一行,
my $line = <INFILE>;。它需要一个循环,其中一行接一行地读取,while (my $line = <INFILE>) { ... }其余的似乎都很好。但是,如果它没有第三个字段,为什么不跳过该行呢? (这真的是一个很好的条件吗?)就像next if not $fields[2];。然后,整个事情需要用现代 Perl 重写。 -
每次循环都可以将所需的字段存储在一个数组中,并在循环后将其全部打印出来。或者,当然,您可以在每行找到它们时打印它们。 (代码中
while循环在$fields[2]上没有意义。) -
@zdim 你好,zdim,一开始我试过用while,但是一直输出“en_AU”
-
发表了一个答案,但我不明白你需要什么的一些解释。告诉我进展如何
标签: perl