从字符位置获取行号

时间:2011-10-06 08:26:10

标签: perl

如何找到文件中字符n所在的行?

例如,我如何知道字符5347在给定文件中的位置?

2 个答案:

答案 0 :(得分:4)

如果您使用行输入运算符逐行读取文件句柄,则特殊变量$.会给出当前行。

以下是一些示例代码:它读取文件行,使用$pos计算字符。

#!/usr/bin/env perl

use v5.12;
use strict;

open my $fh, '<', 'file.txt';

my $reference = 5347;
my $pos       = 0;

do {
    $pos += length <$fh>;
 } while ( $pos < $reference );

say $.;

答案 1 :(得分:3)

这个经过轻度测试的代码在我看来可以完成这项工作:

my $desired = 5347;
my $char_count = 0;
while ( <$fh> ) {
    $count += length;
    if ( $count >= $desired ) {
        print $. . $/;
        last;
    }
}

当然它假定$fh是一个尚未读取的已经打开的文件句柄。

另请注意,它会计算字符数,而不是字节数,这就是您所说的,但可能不是您的意思。