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

Ber*_*şek 4 perl input delimiter argv

我试图获取一个带有@ARGV数组的输入文件,并将所有元素写入一个带有perl中分隔符空间的数组.

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

0145 2145
4578 47896
45 78841
1249 24873
Run Code Online (Sandbox Code Playgroud)

(有多行,但这里没有显示)问题是:

  1. 我不知道如何将ARG [0]作为一个数组
  2. 我想把输入文件的每个字符串作为单个字符串,换句话说,line1 0145 2145将不是一个字符串,它将是两个不同的字符串,通过空格分隔.

Mat*_*eck 6

我想这就是你想要的.在@resultarray这段代码最终会拿着一个数字列表.

如果您为程序提供了一个文件名以用作命令行的输入,请将其从ARGV数组中取出并将其作为文件句柄打开:

my $filename = $ARGV[0];
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
Run Code Online (Sandbox Code Playgroud)

一旦有了文件句柄,就可以使用while循环遍历文件的每一行.chomp将新行字符从每行的末尾移除.用于split根据空格分割每一行.这将返回一个数组(@linearray在我的代码中),其中包含该行中的数字列表.然后,push我的线阵列到了我的结尾@resultarray.

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

并记得添加

use warnings;
use strict;
Run Code Online (Sandbox Code Playgroud)

在您的perl文件的顶部,如果您的代码中出现任何问题,可以帮助您.


只是为了说明如何处理程序的不同输入.以下命令:

perlfile.pl < inputfile.txt
Run Code Online (Sandbox Code Playgroud)

将获取inputfile.txt 的内容并将其传递给STDIN文件句柄.然后,您可以使用此文件句柄来访问inputfile.txt的内容

while(my $line = <STDIN>){
    # do something with this $line
}
Run Code Online (Sandbox Code Playgroud)

但是你也可以通过在执行命令之后放置它们来为你的程序提供一些文件名来读取:

perlfile.pl inputfile1.txt inputfile2.txt
Run Code Online (Sandbox Code Playgroud)

这些文件名将作为字符串读取并放入@ARGV数组中,以便数组如下所示:

@ARGV:
    [0] => "inputfile1.txt"
    [1] => "inputfile2.txt"
Run Code Online (Sandbox Code Playgroud)

由于这些只是文件的名称,因此在访问文件内容之前需要在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
}
Run Code Online (Sandbox Code Playgroud)

注意我是如何利用shift这段时间来获取数组@ARGV中的下一个元素的.有关班次的详细信息,请参阅perldoc.还有关于开放的更多信息.