Schrift
[thread]9028[/thread]

Muster in Text suchen: Muster in Folge eines anderen Musters



<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-05-23 12:07
#76855 #76855
hallo !
hat jemand eine idee?

habe eine datei mit folgendem Inhalt:

blabla blabla
Error bla
dieter bla NAME1
blabla
blob
kurt blub NAME2
bla blib
___________________
blabla blabla
peter bla NAME1
blabla
ursula blub NAME2
bla blib
___________________
blabla blabla
Error bla
heinz bla NAME1
blabla
fred blub NAME2
bla blib

usw...

jetzt möchte ich herausfinden, wo in der Datei ein "Error" vorkommt und die jeweils darauf foldenden Zeilen mit "NAME1" und "NAME2" ausgeben.

hiermit-
Code: (dl )
1
2
3
4
5
6
while($i = <datei>)
{
foreach ($i) {
if ($_ =~ /Error/){print $_;}
}
}


-finde ich zwar die einzelnen Zeilen, ich bekomme aber nicht heraus, wie ich über die gesamte Datei nur nach NAME1 und NAME2 suchen kann, wenn vorher ein "Error" da war.

meine gewünschte Ausgabe sähe so aus:
Error bla
dieter bla NAME1
kurt blub NAME2
Error bla
heinz bla NAME1
fred blub NAME2

Danke schonmal
MisterL
 2007-05-23 13:22
#76856 #76856
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
ungetestet (also alles in Deckung...):
in der if-Anweisung sind weitere und-Bedingungen anzubringen.
Code: (dl )
if (($_ =~ /Error/) && ($_=~/NAME1/) && ($_=~/NAME2/)){print $_}; 

Vielleicht kann man auch mit oder || und Klammersetzung experimentieren

Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
Ronnie
 2007-05-23 13:49
#76857 #76857
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hier kann der flipflop-Operator (..) verwendet werden:
Code: (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
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

while (<DATA>) {
if (/Error/ .. /NAME2/) {
print if /Error/ or /NAME1/ or /NAME2/;
}
}

__DATA__
blabla blabla
Error bla
dieter bla NAME1
blabla
blob
kurt blub NAME2
bla blib
___________________
blabla blabla
peter bla NAME1
blabla
ursula blub NAME2
bla blib
___________________
blabla blabla
Error bla
heinz bla NAME1
blabla
fred blub NAME2
bla blib
MisterL
 2007-05-23 14:03
#76858 #76858
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Data::Dumper war tatsächlich die viel bessere Lösung :-)
Folgender Programmcode ist wegen der Ausgabe noch etwas verbesserungswürdig
Code: (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
#!/usr/bin/perl

use strict;
use warnings;

#use Data::Dumper;

while (my $i=<DATA>) {
# if (/Error/ .. /NAME2/) {
# print if /Error/ or /NAME1/ or /NAME2/;
foreach ($i) {
if ($_ =~ /Error/ or /NAME1/ or /NAME2/){print $_;}
#if ($_ =~ /Error/) and ($_=~/NAME1/) and ($_=~/NAME2/){print $_;}
}
}

__DATA__
blabla blabla
Error bla
dieter bla NAME1
blabla
blob
kurt blub NAME2
bla blib
___________________
blabla blabla
peter bla NAME1
blabla
ursula blub NAME2
bla blib
___________________
blabla blabla
Error bla
heinz bla NAME1
blabla
fred blub NAME2
bla blib


Ausgabe:
Error bla
dieter bla NAME1
kurt blub NAME2
peter bla NAME1
ursula blub NAME2
Error bla
heinz bla NAME1
fred blub NAME2

Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
Ronnie
 2007-05-23 14:12
#76859 #76859
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@MisterL: Du hast da was übersehen, was der OP in seinem ersten Beitrag geschrieben hat:
Quote
(...) nur nach NAME1 und NAME2 suchen kann, wenn vorher ein "Error" da war.
\n\n

<!--EDIT|Ronnie|1179915156-->
bloonix
 2007-05-23 14:18
#76860 #76860
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=MisterL,23.05.2007, 12:03]Data::Dumper war tatsächlich die viel bessere Lösung :-)[/quote]
War das jetzt ironisch? :)

Data::Dumper wird nur eingebunden, aber nicht wirklich benutzt.
In keinem Beispiel. Löblich finde ich trotzdem $i=<DATA> in deinem
Codestückchen.\n\n

<!--EDIT|opi|1179915594-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
MisterL
 2007-05-23 14:34
#76861 #76861
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Ich habe doch geschrieben, dass meine Lösung verbesserungswürdig ist...
Das mit dem nicht verwendeten Data::Dumper habe ich übersehen Wallbang

Ciao
“Perl is the only language that looks the same before and after RSA encryption.”
hasimausi
 2007-05-25 19:01
#76862 #76862
User since
2007-05-25
1 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen !

die alten Gummilatschen waren genau das, wonach ich gesucht hatte. :) vielen Dank Ronnie!!

Code: (dl )
if (/Error/ .. /NAME2/)



servus
der oinker (konnte mich mit dem benutzernamen nicht registrieren ?? ist doch nich sooo anstössig - oder ?)
MisterL
 2007-05-25 19:45
#76863 #76863
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Der Benutzername ist an sich nicht anstössig. Allerdings scheint die DB gerade die maximal mögliche Menge an Usern drin zu haben (oder sonstwas ist passiert) und lässt Neulinge aussen vor...

Aber da ist ja bald die neue Forumssoftware in Aussicht :-)
“Perl is the only language that looks the same before and after RSA encryption.”
<< >> 9 Einträge, 1 Seite



View all threads created 2007-05-23 12:07.