Хорошо, я читал о разных способах сделать это, но я просто хочу проверить, была ли невидимая проблема с тем, как я это сделал, или есть лучший способ (возможно, grep?) .
Вот мой рабочий код:
#!usr/bin/perl
use strict;
use warnings;
my $chapternumber;
open my $corpus, '<', "/Users/jon/Desktop/chpts/chpt1-8/Lifeprocessed.txt" or die $!;
while (my $sentence = <$corpus>)
{
if ($sentence =~ /\~\s(\d*F*[\.I_]\w+)\s/ )
{
$chapternumber = $1;
$chapternumber =~ s/\./_/;
}
open my $outfile, '>>', "/Users/jon/Desktop/chpts/chpt$chapternumber.txt" or die $!;
print $outfile $sentence;
}
Этот файл является учебником, и я обозначил новые главы следующим образом: ~ 1.1 Organisms Have Changed over Billions of Years 1.1.
или ~ 15Intro ...
или ~ F_14
Я хочу, чтобы это было начало нового файла: chpt1_1.txt (или другого chpt15Intro и т. Д.). ..). Который заканчивается, когда я нахожу следующий разделитель главы.
1 вариант: Возможно, вместо того, чтобы построчно, просто получить весь блок вот так? :
local $/ = "~";
open...
while...
next unless ($sentenceblock =~ /\~\s([\d+F][\.I_][\d\w]+)\s/);
....
Большое спасибо.