Как извлечь табличные данные, которые встроены в не-табличный текстовый файл? - PullRequest
0 голосов
/ 17 мая 2011

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

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

Вот пример ввода и вывода, где вывод читается и записывается строка за строкой в ​​базу данных.

INPUT_FILE

MiscText MiscText MiscText
MiscText MiscText MiscText
MiscText MiscText MiscText
SubHeader
PASS    1283019238  alksdjalskdjl
FAIL    102310928301    kajdlkajsldkaj
PASS    102930192830    aoisdajsdoiaj
PASS    192830192301    jiasdojoasi
MiscText MiscText MiscText
MiscText MiscText MiscText
MiscText MiscText MiscText

ВЫХОД (чтение / запись построчно из текстового файла в БД)

ROW-01{column01,column02,column03}
...
ROW-nth{column01,column02,column03}

Ответы [ 3 ]

2 голосов
/ 17 мая 2011

Распознавать, когда начинать обработку табличных данных, легко. У вас есть линия маркера. Трудность заключается в том, чтобы понять, когда прекратить обработку данных. Вы можете применить эвристику остановки для обработки данных, когда split не дает ожидаемого результата.

use strict;
use warnings;
my $tab_data;
my $num_cols;
while ( <> ) {
    $tab_data = 1, next if $_ eq "SubHeader\n";
    next unless $tab_data;
    chomp;
    my @cols = split /\t/;
    $num_cols ||= scalar @cols;
    last if $num_cols and $num_cols != scalar @cols;
    print join( "\t", @cols ), "\n";
}

Сохранить как etd.pl (etd = извлекать табличные данные, что вы думаете?) И вызвать его так из командной строки:

perl etd.pl < your-mixed-input.txt
1 голос
/ 17 мая 2011

Если вы знаете, как извлечь данные, зачем создавать новый файл, а не обрабатывать его немедленно?

0 голосов
/ 18 мая 2011

В случае, если это данные фиксированной ширины, я настоятельно рекомендую использовать unpack или обычный старый substr.

...