Perl中的文件句柄

时间:2011-01-18 18:08:48

标签: perl filehandle

而不是我习惯的典型文件句柄:

open INPUT, $input;
while ($line = <INPUT>) {
    ....
}
close INPUT;

如何检索文件中指向行的指针,以便我可以在wiil处推进这些指针?我正在尝试创建两个指向其对应的排序文件的指针,这样我就可以根据一个文件中的行是否比另一个文件中的行“更少”或“更大”来推进指针。 / p>

注意:假设输入文件是BIG。

3 个答案:

答案 0 :(得分:7)

如果我理解正确的话,

perldoc -f tell

请注意,您希望{<1}} 读取行之前获取该行的起始位置。

返回给定位置的功能是seek

或者,Tie::File将允许您将文件视为一个行数组,并在幕后进行一些巧妙的管理。

答案 1 :(得分:0)

为什么不存储在数组中?

my @lines1 = <INPUT1>;
my @lines2 = <INPUT2>;

以下是关于ysth的搜索/告知建议的示例,如果文件太大,可能更符合您的要求: http://www.nntp.perl.org/group/perl.beginners/2007/12/msg97522.html

答案 2 :(得分:0)

鉴于我的评论的答案,那么你需要修改你的逻辑(伪代码):

open Master;
open Transaction;

# Get initial records?
read first Master;
read first Transaction;

BATCH_LOOP:
while (!eof(Master) && !eof(Transaction))
{
     while (Master.ID < Transaction.ID && !eof(Master))
     {
           write Master;
           read next Master;
     }
     if (Master.ID > Transaction.ID)
     {
           report Missing Master for Transaction;
           read next Transaction;
           next BATCH_LOOP;
     }
     # Master.ID == Transaction.ID
     Update Master from Transaction;
     read next Transaction;
}

# At most one of the following two loop bodies is executed
while (!eof(Master))
{
     read next Master;
     write Master;
}

while (!eof(Transaction))
{
     Report Missing Master;
     read next Transaction;
}

双重(和三重)检查逻辑 - 它是围绕干扰写的。但它接近你所需要的。

使用词汇文件句柄:

open my $master, "<", $master_file or die "Failed to open master file $master_file ($!)";
open my $trans,  "<", $trans_file  or die "Failed to open transaction file $trans_file ($!)";

你可以互相阅读。