Каков наиболее эффективный способ синтаксического анализа текстового файла с помощью Perl?

Хотя это довольно простой вопрос, я не могу найти аналогичный вопрос, поэтому, пожалуйста, дайте ссылку на него, если вы знаете о существующем вопросе / решении по Итак.


У меня есть файл .txt размером около 2 МБ и примерно 16 000 строк. Длина каждой записи составляет 160 символов с коэффициентом блокировки 10. Это более старый тип структуры данных, который почти похож на файл с разделителями табуляцией, но разделение осуществляется одиночными символами / пробелами.

Во-первых, I glob каталог для . txt - в каталоге никогда не может быть больше одного файла, поэтому эта попытка может быть неэффективной сама по себе.

my $txt_file = glob "/some/cheese/dir/*.txt";

Затем я открываю файл со следующей строкой:

open (F, $txt_file) || die ("Could not open $txt_file");

Согласно словарю данных для этого файла, я разбираю каждое «поле» из каждой строки с помощью функции Perl substr () в пока цикл.

while ($line = <F>)
{
$nom_stat   = substr($line,0,1);
$lname      = substr($line,1,15);
$fname      = substr($line,16,15);
$mname      = substr($line,31,1);
$address    = substr($line,32,30);
$city       = substr($line,62,20);
$st         = substr($line,82,2);
$zip        = substr($line,84,5);
$lnum       = substr($line,93,9);
$cl_rank    = substr($line,108,4);
$ceeb       = substr($line,112,6);
$county     = substr($line,118,2);
$sex        = substr($line,120,1);
$grant_type = substr($line,121,1);
$int_major  = substr($line,122,3);
$acad_idx   = substr($line,125,3);
$gpa        = substr($line,128,5);
$hs_cl_size = substr($line,135,4);
}


Этот подход требует много времени для обработки каждой строки, и мне интересно, есть ли более эффективный способ извлечения каждого поля из каждой строки файла.

Может ли кто-нибудь предложить более эффективный / предпочтительный метод?

6
задан CheeseConQueso 2 March 2011 в 20:59
поделиться