Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Perl中按行号读取数组中的文件时出现问题_Arrays_Perl - Fatal编程技术网

Arrays 在Perl中按行号读取数组中的文件时出现问题

Arrays 在Perl中按行号读取数组中的文件时出现问题,arrays,perl,Arrays,Perl,我正在处理两个文件,所以当我循环浏览其中一个文件时,我需要浏览另一个文件的一部分,我在其中遇到的信息将是连续的。因此,我认为最好的方法是记录行号: 打开(解析为“

我正在处理两个文件,所以当我循环浏览其中一个文件时,我需要浏览另一个文件的一部分,我在其中遇到的信息将是连续的。因此,我认为最好的方法是记录行号:

打开(解析为“ my@parsedFile=
我的$line=0
my$size=@parsedFile
#下一部分在循环中,但唯一重要的是下一行
打印$parsedFile[$line];

即使$line的值增加,它也不会打印任何内容,但如果我执行以下操作,则不会出现问题:

foreach(@parsedFile){ 打印美元; }

我甚至尝试过从@parsedFile中提取单独的行,但没有成功。

要在数组中加载文件行,需要先打开文件:

open F,'<','file.txt' or die;
my @parsedFile = <F>;
open F,“
是一个极其挑剔的运算符,它只根据括号中内容的精确语法来做两件截然不同的事情
(带有额外的空格)是glob(“PARSED”),而不是readline(PARSED),因此您的数组只是获取单个字符串“PARSED”

(假设您发布的代码是准确的;如果您复制并粘贴实际不工作的代码,而不是重新键入代码的一部分,这将非常有帮助;如果您的复制和粘贴的代码可以按原样运行,以演示您的问题,这将更有帮助。)

请注意:

use warnings;
open(PARSED, "< filename") or die $!;
my @lines = < PARSED >;
使用警告;
打开(解析为“

将给你一个警告,解析只使用一次,这是一个很大的线索,说明
没有按照你的想法去做。

最初的问题是由ysth解决的,但是如果文件不是很大(你正在将它们读入内存,所以我猜不是),为什么不使用这些诡计来代替呢

use strict;
use warnings;
use 5.010;
use Tie::File;

tie my @parsedFile, 'Tie::File', 'file.txt' or die "Error: $!";

my $line = 0;
print $parsedFile[$line];

我错过什么了吗?例如,
@parsedFile
仅包含字符串
file.txt
。你能提供更多的信息,以便我们能帮助你吗?我的错误,修复了它,我只是手工复制了我程序的一部分。你发布的示例打印文件的第一行很好。。。我只要把它放进去;在…之后,最好使用带词法文件句柄的3参数open。有关更多信息,请参见。@daotoad,谢谢你的建议:)+1用于指出挑剔之处。仍然没有解释为什么它应该在
foreach
循环中工作……谢谢。我刚刚重写了与该文件相关的所有内容,并使其正常工作。@Goresplater:出了什么问题?我们没有看到一些细微差别,例如多个
my@parsedFile
、拼写错误等。还有一个问题,如果你做了类似my@lines=,你能不再使用吗?只是为了测试它,后来我做了while(),但它似乎没有进入这个循环。@NCH:您可以再次使用PARSED,但它已经到达了文件的末尾,所以要从头开始再次读取它,您需要先执行
seek(PARSED,0,0)
。我会记住这一点,以便以后使用。我正在使用的文件不是太大。或者,如果数组的唯一用途是对其进行迭代,为什么要读取整个文件?嗯,我正在检查文件中的特定匹配项,然后我想保留该字符串,我不知道匹配项将在哪里。