Я застрял на кажущейся тривиальной проблеме, но не уверен, что мне не хватает. Нужна помощь.
У меня есть файл, который разделен стандартным разделителем полей (0x1f
) и разделителем записей (0x1e
). (https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text)
Мне не нужно разбирать поля, но я хочу получить записи.
Я прочитал о специальной переменной Perl для разделения записей и попытался использовать ее для анализа файла.
Файл выглядит следующим образом. ^
представляет разделитель полей, а ^^
представляет разделитель записей (в vim). На возвышенных они будут отображаться как соответствующие шестнадцатеричные коды.
ID^_NAME^_PARENTID^_Prov ID^_Pat_ID^_Another ID^_Program1^_Program2^_Status^_Date^_Reason^_Added^_Sn Length^_ze Reason^_StAge^_EnAge^_Notes^^NUMBER^_VARCHAR^_NUMBER^_ NUMBER^_NUMBER^_NUMBER^_VARCHAR^_VARCHAR^_VARCHAR^_DATE^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^^12^_40^_12^_^_12^_12^_200^_200^_12^_^_200^_1^_ 4000^_4000^_2000^_2000^_4000^^0^_^_0^_^_0^_0^_^_^_^_^_^_^_^_^_^_^_^^
Ниже приведен код, который я написал для разбора записей. Проблема в том, что я делаю, весь файл считывается в скаляр $ row.
Я изначально предполагал, что perl ожидает, что $/
будет установлен в строковый тип. Это тоже не работает, и я застрял.
Ценю любую помощь. Спасибо.
#local $/ = sprintf("%s",chr("0xa"));
local $/ = chr(0xa);
open my $fh, "<", $file or die "$file: $!";
print("reading records\n");
while (my $row = <$fh>) {
print("Record:", $row, "\n");
}