Thread Zeilen mit bestimmten Wort suchen und darin Text in '' in Array schreiben (16 answers)
Opened by eyekona at 2013-08-15 12:37

murphy
 2013-08-15 13:52
#169572 #169572
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Reguläre Ausdrücke sind auf jeden Fall ein geeignetes Werkzeug, um diese Aufgabe zu lösen. Zum Beispiel so:
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
use 5.012;
use warnings;

my $text = <<EOF;
Hallo Welt!
Rhabarber mit 'Quark'
source '/sonst/wo'
oder auch anderes Zeug
'/wo/anders' source
Blubberdidu 'daddeldumm' kawumm
EOF

my @sources =
  map {
    if (/source/ && /'([^']*)'/) {
      ($1)
    } else {
      ()
    }
  }
  split /\n+/, $text;

say for @sources;


Im Prinzip geht aber natürlich alles was mit regulären Ausdrücken machbar ist auch anders. Zum Beispiel so:
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
28
29
30
31
32
33
34
35
36
37
use 5.012;
use warnings;

my $text = <<EOF;
source '/foo/bar'
hollareiduljoeh
peng '/zack/bumm' source oder so
oans 'zwoa' dreie
EOF

my @lines;
my $pos = 0;
my $len = length $text;
while ($pos < $len) {
  my $sep = index $text, "\n", $pos;
  if ($sep >= 0) {
    push @lines, substr $text, $pos, $sep - $pos;
    $pos = $sep + 1;
  } else {
    push @lines, substr $text, $pos;
    $pos = $len;
  }
}

my @sources =
  map {
    my $start = index $_, "'";
    my $stop = index $_, "'", $start + 1;
    if (index($_, 'source') >= 0 and $start >= 0 and $stop >= 0) {
      (substr $_, ++$start, $stop - $start)
    } else {
      ()
    }
  }
  @lines;

say for @sources;


Zum Thema Tutorials: Es lohnt sich vielleicht ein Blick auf die Wikiseite Wiki:PerlTutorials oder natürlich auch die Lektüre von perlretut.
When C++ is your hammer, every problem looks like your thumb.

View full thread Zeilen mit bestimmten Wort suchen und darin Text in '' in Array schreiben