Schrift
[thread]9946[/thread]

Muster finden -nächste/vorherige Zeile ausgeben

Leser: 4


<< >> 8 Einträge, 1 Seite
Gast Gast
 2007-08-02 22:41
#97352 #97352
Hallo zusammen!

habe nur eine kurze (und wahrscheinlich sehr triviale) Frage - habe es aber selber nicht rausgefunden...:
ich möchte eine Textdatei nach einem "MUSTER" durchsuchen.

meine Ausgabe sollte so aussehen:

zeile davor
"MUSTER"
zeile danach
zeile danach

while (<DATEI>) {
print if /$muster/;
}

weiter bin ich nicht gekommen...
kann mir jemand auf die sprünge helfen?
danke schomma.
ingo
renee
 2007-08-02 22:45
#97353 #97353
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
my $last_line = '';

while( my $line = <DATEI> ){
    print $last_line if $line =~ /$muster/;
    $last_line = $line;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-08-02 23:14
#97357 #97357
danke für die unglaublich schnelle antwort renee!

ich bin aber wohl immer noch zu blöde...habe die Frage aber vielleicht auch falsch gestellt.

ein Beispiel:
Textdatei:

aaa
bbb
ccc
ddd
eee

fff
ggg
hhh
iii
jjj

usw.....

jetzt möchte ich nach z.b. "ggg" suchen (das bekomme ich soweit schon hin) - aber meine Ausgabe, wenn ich nach "bbb" suche, soll so aussehen:

fff
ggg
hhh
iii
jjj

ich möchte also nach einem Muster suchen, und eine Zeile davor und 3 dahinter als Ergebnis ausgeben.
steckt das in Deiner Lösung schon drin und ich sehs nicht?
Gast Gast
 2007-08-02 23:35
#97362 #97362
tippfehler...sorry

Gast+2007-08-02 21:14:40--
jetzt möchte ich nach z.b. "ggg" suchen (das bekomme ich soweit schon hin) - aber meine Ausgabe, wenn ich nach "bbb" suche, soll so aussehen:


muss natürlich "ggg" heissen, anstatt "bbb"
renee
 2007-08-03 00:53
#97367 #97367
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
my $flag;
my $last_line = '';

while( my $line = <DATEI> ){
    $flag = 1 if $line =~ /$muster/;
    print $last_lint if $flag;
    $last_line = $line;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Ronnie
 2007-08-03 04:13
#97375 #97375
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wenn die Datei nicht zu groß ist, kann man sie auch in ein Array "slurpen". Oder CPAN:Tie::File verwenden:
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
#!/usr/bin/perl

use strict;
use warnings;

# use Tie::File;

my @lines = <DATA>;
my $last_idx = $#lines;

for (0 .. $last_idx) {
   print @lines[$_-1 .. $_+2] if $lines[$_] =~ /ggg/;
}

__DATA__
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
kkk
lll
mmm
Gast Gast
 2007-08-03 10:52
#97379 #97379
@renee bei deinem code verstehe ich die logik nicht - funzt bei mir auch nicht - trotzdem vielen dank.

@ronnie super! vielen dank, genau, was ich gesucht habe.

schönen tag euch noch!
renee
 2007-08-03 10:55
#97381 #97381
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da ist nur ein kleiner Schreibfehler drin, sonst wäre es lauffähig. Ich hatte sowieso überlesen, dass nur die *3* Zeilen nach dem Muster ausgegeben werden sollen...

Ich hoffe, Du verwendest auch Wiki:[tt]use strict[/tt]...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2007-08-02 22:41.