使用Perl读取输入文件并将其放入带有空格分隔符的数组中

4

我将尝试使用@ARGV数组读取输入文件,并在perl中用空格作为分隔符将所有元素写入一个数组。

示例输入参数是一个文本文件,例如:

0145 2145
4578 47896
45 78841
1249 24873

问题是:

  1. 我不知道如何将ARG [0]作为数组
  2. 我想将输入文件中的每个字符串作为单独的字符串,换句话说,第一行0145 2145不会成为一个字符串,而是通过用空格分隔成两个不同的字符串。
1个回答

6
我认为这正是您想要的。此代码中的@resultarray将最终保存数字列表。
如果您要从命令行传递文件名作为输入,请将其从ARGV数组中取出,并将其作为文件句柄打开:
my $filename = $ARGV[0];
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";

一旦你拥有了文件句柄,你可以使用while循环遍历文件的每一行。 chomp 函数会将每一行结尾的换行符移除。使用split函数基于空格将每一行分割成一个数组(在我的代码中是@linearray),其中包含该行内的数字列表。然后我使用push函数将我的行数组添加到@resultarray的末尾。

my @resultarray;
while(my $line = <$filehandle>){
    chomp $line;
    my @linearray = split(" ", $line);
    push(@resultarray, @linearray);
}

记得添加

use warnings;
use strict;

在你的Perl文件顶部加入此行代码,可以帮助你在编写代码时解决问题。


为了澄清如何处理程序中不同的输入,可以使用以下命令:

perlfile.pl < inputfile.txt

将inputfile.txt中的内容传输到STDIN文件句柄。然后,您可以使用此文件句柄访问inputfile.txt的内容。

while(my $line = <STDIN>){
    # do something with this $line
}

但是,您也可以在执行命令后将要读取的文件名一起提供给程序:

perlfile.pl inputfile1.txt inputfile2.txt

这些文件名将被读取为字符串并放入@ARGV数组中,以便该数组看起来像这样:
@ARGV:
    [0] => "inputfile1.txt"
    [1] => "inputfile2.txt"

由于这些只是文件的名称,您需要在perl中打开文件,然后才能访问文件的内容。因此,对于inputfile1.txt:

my $filename1 = shift(@ARGV);
open(my $filehandle1, '<', $filename1) or die "Can't open $filename1";

while(my $line = <$filehandle1>){
    # do something with this line
}

注意我这次使用了shift来获取数组@ARGV中的下一个元素。有关shift的更多细节,请参阅perldoc。还可以在open上获取更多信息。


非常感谢,但我想看到数组的元素,所以当我写下面的代码时:foreach $value (@resultarray) {print($value); }它会报错,如下所示:global symbol "$value" requires explicit package name at c:\users......我该如何打印这些元素呢? - Berkay Abidin şimşek
还有关于你的代码,错误在这里:http://imageshack.us/photo/my-images/341/asdasdfasfagfq.png/ - Berkay Abidin şimşek
打印时出现的错误是use warnings编译指示的结果。它要求你在开头使用包名称定义所有变量。因此,在您的情况下,您必须写成my $value而不是$value。以这种方式编写Perl代码是一个非常好的主意,因为一旦你习惯了它,你将花费更少的时间调试程序。 - MattLBeck
另一个错误是因为您需要使用命令行形式的 test1.pl inputfile.txt,而不是 test1.pl < inputfile.txt。在命令行上使用 < 将输入文件传递给 STDIN 文件句柄。但是 Perl 也会接受执行命令后的字符串参数。这些参数将进入 @ARGV 数组中。 - MattLBeck
很高兴能够帮助您!如果您需要更多解释,我在答案中添加了有关程序输入的更多信息。确保您也理解Perl程序的每个部分如何工作 :) - MattLBeck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接