2012-04-12 6 views
0
.I 1 
.T 
Alice in wonderland 
She follows it down a rabbit hole when suddenly 
she falls a long way to a curious hall with many locked doors of all sizes. 
She finds a small key to a door too small for her to fit through. 
.B 
CACM wolf dog December, 1958 
.A 
Perlis, A. J. 
Samelson,K. 
.N 
CA581203 JB March 22, 1978 8:28 PM 
.X 
100 5 1 
123 5 1 
164 5 1 
.I 2 
.T 
Extraction of Roots by Repeated Subtractions for Digital Computers 
the contents of which cause her to shrink too small to reach the key 
which she has left on the table. 
A cake with "EAT ME" on it causes her to grow. 
.B 
CACM December, 1958 
.A 
Sugai, I. 
.N 
CA581202 JB March 22, 1978 8:29 PM 
.X 
2 5 2 
2 5 2 
2 5 2

Nun ist die obenstehende Text ist der Inhalt von 2 Dateien, startet neue Datei von .I (gefolgt von einer Zahl) i müssen Sie im Text zwischen .T & .B, .B & .A, .A & .N, .N & .X stoppen und den gesamten Text zwischen .X und dem Beginn eines neuen Dokuments entfernen. dh .I (gefolgt von einer Nummer)Wie sicher Stoppwörter aus einem Abschnitt in einer Datei zu entfernen, die mit bestimmten Zeichen beginnt und endet

"Output aussehen sollte"

.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 

ich brauche auf den Text von Wörtern zu tun zu stoppen, die zwischen .T erscheint & .B, .B & .A , .A & .N, .N & .X

+0

Ich bin nicht genau sicher, was Sie wollen. Wenn ich deinen Anweisungen folge, scheint es, dass ich alles aus der Datei entferne. Kannst du klarstellen, was du willst und vielleicht ein Beispiel geben, wie die Datei nach dem Programm aussehen soll? –

Antwort

0

Der erste Schritt besteht darin, jeden Block in eine anständige Datenstruktur zu bringen. Das folgende Skript macht das. Sobald Sie %segments haben, können Sie jeden Block ändern und wieder zusammenbauen, wie Sie möchten.

#!/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; 
     } 
    } 
} 
+0

Ich bin neu in Perl, können Sie mir sagen, wo Sie die Datei mit dem gesamten Inhalt laden – lolla

+0

Sie öffnen die Datei und übergeben Sie das Dateihandle auf 'run' als das erste Argument. –

Verwandte Themen