0
.I 1
.T
不思議の国のアリス
彼女はそれを追ってうさぎの穴を下り、突然
彼女は、あらゆるサイズの多くのロックされたドアがある奇妙なホールに長い道のりを転がりました。
彼女はドアの小さな鍵が小さすぎて通り抜けられないことに気づきました。
.B
CACM オオカミ犬 1958 年 12 月
.A
ペルリス、AJ
サメルソン、K.
.N
CA581203 JB 1978 年 3 月 22 日午後 8 時 28 分
。バツ
100 5 1
123 5 1
164 5 1
.I 2
.T
デジタル計算機のための反復減算による根の抽出
その内容により、彼女は小さすぎて鍵に到達できなくなります
彼女がテーブルに置いてきたもの。
「EAT ME」と書かれたケーキが彼女を成長させます。
.B
CACM 1958 年 12 月
.A
菅井 I.
.N
CA581202 JB 1978 年 3 月 22 日午後 8 時 29 分
。バツ
2 5 2
2 5 2
2 5 2

上記のテキストは 2 つのファイルの内容であり、新しいファイルは .I (その後に数字が続く) から始まります。.T & .B 、.B & .A 、.A & .N の間のテキストで停止する必要があります。 .N &.X を削除し、.X と新しいドキュメントの開始の間のすべてのテキストを削除します。すなわち .I (その後に数字が続く)

「出力は次のようになります」

.I 1
.T
Alice wonderland
follows rabbit hole suddenly 
falls long way curious hall locked doors sizes 
door small fit through
.B
CACM wolf dog December, 1958
.A
Perlis, A. J.
Samelson,K.
.N
CA581203 JB March 22, 1978  8:28 PM
.X
.I 2
.T
Extraction Roots Repeated Subtractions Digital Computers
contents cause shrink
left table
cake with EAT causes grow
.B
CACM December, 1958
.A
Sugai, I.
.N
CA581202 JB March 22, 1978  8:29 PM
.X

.T & .B , .B & .A , .A & .N, .N &.X の間に現れるテキストの単語を停止する必要があります

4

1 に答える 1

0

最初のステップは、各チャンクをまともなデータ構造にすることです。次のスクリプトはそれを行います。を取得したら%segments、必要に応じて各チャンクを変更して再構築できます。

#!/usr/bin/env perl

use strict; use warnings;
use Data::Dumper;

my %stops = map { $_ => 1 } qw(a all of in);
run(\*DATA, \%stops);

sub run {
    my $fh = shift;
    my $stops = shift;

    local $/ = '.I';

    my $pat = qr{
        ^[ ] (?<I> [0-9]+) \n
        ^[.] T \n (?<T> .+)
        ^[.] B \n (?<B> .+)
        ^[.] A \n (?<A> .+)
        ^[.] N \n (?<N> .+)
        ^[.] X \n (?<X> .+)
    }xms;

    while (my $chunk = <$fh>) {
        chomp $chunk;
        next unless $chunk;

        if ($chunk =~ $pat) {
            my %segments = %+;
            print Dumper \%segments;
        }
    }
}
于 2012-04-13T05:04:54.117 に答える