在Perl中读取输入文件并将其放入带有空格分隔符的数组中
我试图获取一个带有在Perl中读取输入文件并将其放入带有空格分隔符的数组中,perl,input,delimiter,argv,Perl,Input,Delimiter,Argv,我试图获取一个带有@ARGV数组的输入文件,并用perl将其所有元素写入一个带有分隔符空间的数组 示例输入参数是一个txt文件,例如: 0145 2145 4578 47896 45 78841 1249 24873 (有多行,但此处未显示) 问题是: 我不知道如何将ARG[0]作为一个数组的示例 我想把输入文件中的每个字符串作为单个字符串,换句话说,行1 0145 2145将不是一个字符串,而是两个不同的字符串,用空格分隔 我想这就是你想要的。此代码中的@resultarray将包含一个数字
@ARGV
数组的输入文件,并用perl将其所有元素写入一个带有分隔符空间的数组
示例输入参数是一个txt文件,例如:
0145 2145
4578 47896
45 78841
1249 24873
(有多行,但此处未显示)
问题是:
我想这就是你想要的。此代码中的
@resultarray
将包含一个数字列表
如果要为程序指定一个文件名作为命令行的输入,请将其从ARGV数组中取出并作为文件句柄打开:
my $filename = $ARGV[0];
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
记住要加上
use warnings;
use strict;
在perl文件的顶部,以便在代码中出现任何问题时提供帮助
只是为了澄清你如何处理你的程序的不同输入。以下命令:
perlfile.pl < inputfile.txt
但您也可以通过将文件名放在执行命令之后,为程序指定一些要读取的文件名:
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
}
my$filename1=shift(@ARGV);
打开(my$filehandle1,'非常感谢,但我想看到数组的元素,所以当我写foreach$value(@resultarray){print$value;}时,它会给出全局符号“$value”之类的错误在c:\users处需要显式的包名……我如何打印元素以及您的代码,错误是打印时出现的错误是由使用警告
pragma造成的。它要求您在开始时用包名定义所有变量。因此,在您的情况下,您必须编写我的$value
f$value
。以这种方式编写perl代码是一个非常好的主意,因为一旦习惯了它,调试程序的时间就会少很多。另一个错误是因为您需要使用命令行表单test1.pl inputfile.txt
,而不是test1.pl
。现在使用就可以了。谢谢您非常感谢,这正是我想要的
@ARGV:
[0] => "inputfile1.txt"
[1] => "inputfile2.txt"
my $filename1 = shift(@ARGV);
open(my $filehandle1, '<', $filename1) or die "Can't open $filename1";
while(my $line = <$filehandle1>){
# do something with this line
}