Thread Regex über mehrere Zeilen (10 answers)
Opened by kameltreiber at 2012-01-18 11:26

Linuxer
 2012-01-18 11:41
#155525 #155525
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Ist die Anzahl der Punkte immer gleich? Dann könntest Du es blockweise einlesen lassen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#! /usr/bin/perl

sub read_blocks {
  my $handle = shift;
  local $/   = shift;

  while ( my $block = <$handle> ) {
        # replace newlines with simple space
        $block =~ tr/\r\n/ /s;

    print ">>> $block <<<\n";
  }
}

# give it a handle, and the block delimiter
read_blocks( *DATA, "....\n" );


__DATA__
la
 le
   lu ....
foo
   bar ....
what
ever
....


Ansonsten könnte man die Datei auch zeilenweise einlesen, und die eingelesenen Zeilen zwischenspeichern bis eben die Punkt-Sequenz auftaucht und dann die gesammelten Zeilen modifiziert ausgeben... edit:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /usr/bin/perl

my @collected;
while ( my $line = <DATA> ) {
        # line must end with 4 points
        if ( $line =~ m/\Q....\E$/ ) {
                chomp @collected;
                push @collected, $line;

                print "@collected";
                @collected = ();
        }
        else {
                push @collected, $line;
        }
}

__DATA__
la
 le
   lu ....
foo
   bar ....
what
ever
....


Beides hat den Vorteil, dass die Datei nicht komplett eingelesen wird, sondern immer nur Teile davon...

/edit
Last edited: 2012-01-18 11:46:57 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Regex über mehrere Zeilen