Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8269[/thread]

nur bestimmte worte zulassen: durch grep zur loesung aber wie?

Leser: 2


<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
sabrina
 2006-08-25 14:49
#69222 #69222
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
Hallo,
mal ne (relativ)kurze frage, in meiner liste steht in der dritten spalte immer Domain, es gibt dort ca. 6 verschiedene anmelde moeglichkeiten und ich will nur BRIN und SAGEF403 in meiner liste haben.

Jetzt kann ich doch mit grep in ner Regex mein array durchsuchen nach diesen kriterien: lass nur BRIN und SAGEF403 durch.
Es soll nicht nur die woerter ausgeben sondern die ganze zeile.
Hab jetzt zwei regex mal ausprobiert und verschieden varriert aber es geht nicht! Hier mal zwei standarts und wo sie stehen, sie stehen doch richtig bin mir da nie so sicher:
Nr. 1
Code: (dl )
1
2
3
4
5
6
7
8
9
while( defined (my $line = <FH>) ) 
{  
chomp $line;                
my @new = grep /[BRIN|SAGEF403]+?/g/,@array;
.
.
.
usw
}

da bekomme ich keine ausgabe.
Nr.2
Code: (dl )
 @array = $line =~/[BRIN|SAGEF403]+?/g/; 

Es steht an der gleichen stelle, hab aber auch keine ausgabe!
Ich weis das grep normal die woerter die ich suche zurueck gibt, wenn sie da sind.
Hatte auch mal ne ausgabe mit den "woerten" aber die habe ich gleich wieder geloescht weil ich ja die ganze zeile will.
Kann es sein das ich alles in eine schleife einbauen muss?
Leider kann ich in frueheren Beitraegen nicht so viel zur loesung finden!
lg sabrina\n\n

<!--EDIT|sabrina|1156507673-->
nepos
 2006-08-25 14:59
#69223 #69223
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code (perl): (dl )
@array = $line =~/[CORP|DEOGD001]+?/g/;

sollte wohl auf jeden Fall mal
Code (perl): (dl )
@array = $line =~/(CORP|DEOGD001)+?/g/;

heissen. Die eckigen Klammern bilden eine Zeichenklasse, in der in deinem Fall nun die Zeichen C,O,R,P,|,D,E,G,0,1 zulaessig waeren.
sabrina
 2006-08-25 15:05
#69224 #69224
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
danke probiers gleich mal aus!
lg sabrina
sabrina
 2006-08-25 15:08
#69225 #69225
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
nutzt nichts immer noch keine ausgabe:
Code: (dl )
@array = $line =~/(BRIN|SAGEF403)+/g/; 

die [] klammern hab ich aus perl in 21 tagen da waren auch eckige Klammern
:(
lg sabrina
bo
 2006-08-25 15:32
#69226 #69226
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
versuch mal folgendes...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
while( defined (my $line = <FH>) )
{
chomp $line;
# my @new = grep /[CORP|DEOGD001]+?/g/,@array;
my @new = grep /(CORP|DEOGD001)+?/g, @array;
.
.
.
usw
}
sabrina
 2006-08-25 15:46
#69227 #69227
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@bo
habs grad probiert : :(
Code: (dl )
my @new = grep /(BRIN|SAGEF403)+?/g, @array;

so funzt das auch nicht egal ob runde oder eckige klammern :(
noch irgendwelche forschlaege, bin zur jeder schandtat bereit und fuehre alle codes brav aus. Hab auch schon bissel experimentiert aber bekomm selbst auch nie ne ausgabe.
lg sabrina
Crian
 2006-08-25 15:48
#69228 #69228
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Das +? ist wohl obsolet

Oben schriebst du "BRIN und SAGEF403", nun testest du zwei andere, das wird eventuell nicht das liefern was du möchtest.\n\n

<!--EDIT|Crian|1156506564-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
GwenDragon
 2006-08-25 15:51
#69229 #69229
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Wenn Sabrina nur CORP oder DEOGD001, dann ist das +? unsinnig. Denn dann findet das Regex auch:
MotzCORPolulu, CORPCORPCORP, CORPDEOGD001,DEOGD001CORP. Soll das so sein?
Nach euren Beispielen werden keine Wörter gesucht, sondern mehrfache Teile überall in der Zeile.

Es soll doch nur das ganze Wort gefunden werden, oder?
Crian
 2006-08-25 15:53
#69230 #69230
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Was soll eigentlich die Schleife drum herum? Die beeinflusst doch @array gar nicht? Dann wird @new nur unnötig oft gebildet auf diese Weise. Falls du die Zeilen abprüfen willst, mach es so:

Code: (dl )
1
2
3
4
5
6
my @new;
while(<FH>) {
chomp;
push @new, $_ if /BRIN|SAGEF403/;
}
print "new: @new\n";
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
sabrina
 2006-08-25 16:03
#69231 #69231
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
danke
werd alle vorschlaege gleich mal in die tat umsetzten
@GwenDragon
du hast recht sollte natuerlich als ergebnis jede zeile ausgegeben werden, in der entweder BRIN oder SAGEF403 vorkommt, alle anderen sollen in eine extra datei!
meld mich gleich mit den ergebnissen
@ crian
die schleife gehoert zum restlichen programm wollte den regex nur einbauen, hab gelesen das grep in der while schleife steht und ihn deshalb auch reingestellt!
lg sabrina\n\n

<!--EDIT|sabrina|1156507575-->
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2006-08-25 14:49.