Получить номер строки из позиции символа - PullRequest
2 голосов
/ 06 октября 2011

Как найти строку, в которой находится символ n в файле?

Например, как я могу узнать, где находится символ 5347 в данном файле?

Ответы [ 2 ]

4 голосов
/ 06 октября 2011

Если вы читаете из файлового дескриптора построчно с оператором ввода строки, специальная переменная $. возвращает текущую строку.

Вот пример кода: он читает строку файла, считая символы с $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 $.;
3 голосов
/ 06 октября 2011

Мне показалось, что этот слегка проверенный код выполняет свою работу:

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

Конечно, предполагается, что $fh - это уже открытый дескриптор файла, который еще не был прочитан.

Также обратите внимание, что он подсчитывает символы, а не байты, что вы и сказали, но, возможно, это не то, что вы имели в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...