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

Zugriff auf best. Elemente in Arrayreferenz: Arrayreferenz (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
renee
 2006-11-09 11:07
#71563 #71563
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
foreach my $array ( @{$arrayRef} )
{
my @matches = $array->[1] =~ /<irgendeinmatch/igm;
@matches = map{$array->[0]." --> ".$_}@matches;
print $_,"\n" for @matches;
}
\n\n

<!--EDIT|renee|1163063312-->
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/
Duff
 2006-11-09 11:16
#71564 #71564
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Mmh...ich verstehe diese Konstruktion ehrlich gesagt nicht so ganz.
Die Ausgabe sieht dann so aus, wenn ein match 2mal vorkommt

$array->[0] --> $array[1]

String1 --> $2 aus dem match
String1 --> $1 aus dem match
String1 --> $2 aus dem match
String1 --> $1 aus dem match
String2 --> $2 aus dem match
String2 --> $1 aus dem match
String2 --> $2 aus dem match
String2 --> $1 aus dem match

Ich würde es gerne so machen, dass das Ergebnis so aussieht:
String1 : $2 --> $1 <tab> $2 --> $1
String2 : $2 --> $1 <tab> $2 --> $1

Dazu müsste ich dem Array @matches die Werte ja irgendwie so hinzufügen, dass das Array so aussieht: @matches=("$2 --> $1", "$2 --> $1", ...);

Oder?
D'OH
Daniel
renee
 2006-11-09 11:18
#71565 #71565
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Poste bitte mal Beispiele! Ein Beispielstring, ein Beispiel RegEx und dann die gewünschte Ausgabe.
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/
Duff
 2006-11-09 11:26
#71566 #71566
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Also das ganze sieht ungefähr so aus (der match-Operator bezieht sich hierbei auf ein xml-Dokument):
Code: (dl )
1
2
3
4
foreach my $array ( @{$arrayRef} )
{
@matches = $array->[1] =~ /(<[^>]*?STRING[^>]*?>)(\d{10,15})<\/[^>]*?STRING[^>]*?>/igm;
}


Es soll dann $array->[0] ausgegeben werden und @matches. Da bei dem Match immer ein String geliefert wird und der Inhalt des davorstehenden Tags, sollte die Ausgabe in etwa so aussehen:
Code: (dl )
1
2
String aus $array->[0]    :    <Tag mit Inhalt> --> String <Tag mit Inhalt> --> String
String aus $array->[0] : <Tag mit Inhalt> --> String <Tag mit Inhalt> --> String


Hoffe, es ist jetzt ein wenig verständlicher.
D'OH
Daniel
renee
 2006-11-09 11:56
#71567 #71567
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann kannst Du es doch mit der while-Schleife machen:

Code: (dl )
1
2
3
4
5
6
7
foreach my $array ( @{$arrayRef} )
{
while ($array->[1] =~ /<irgendeinmatch/igm) {
print $array->[0],": ", $1, " --> ",$2,"\n";
}

}
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/
Duff
 2006-11-09 14:02
#71568 #71568
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Danke, die Ausgabe sieht nun schon besser aus, aber noch immer nicht so:
Code: (dl )
1
2
String aus $array->[0]    :    <Tag mit Inhalt> --> String <Tag mit Inhalt> --> String
String aus $array->[0] : <Tag mit Inhalt> --> String <Tag mit Inhalt> --> String


Ich muss doch irgendwie in der while-Schleife die Werte $1 und $2 in ein Array speichern, und dieses dann ausserhalb der while-Schleife ausgeben (und bei erneutem Durchlaufen der while-Schleife dieses wieder neu füllen).

Die Ausgabe, die im Moment habe ist folgende:
Code: (dl )
1
2
3
4
String1 aus $array->[0]    :    <Tag mit Inhalt> --> Match1 
String1 aus $array->[0] : <Tag mit Inhalt> --> Match2
String2 aus $array->[0] : <Tag mit Inhalt> --> Match1
String2 aus $array->[0] : <Tag mit Inhalt> --> Match2


Die Ausgabe ist sozusagen doppelt, wenn ein match 2mal auftreten sollte.
D'OH
Daniel
renee
 2006-11-09 14:42
#71569 #71569
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bitte poste mal Beispiele!

Wie sieht $array aus? Was soll wie ausgegeben werden. Bitte keine Beschreibungen, sondern mal konkrete Beispiele.
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/
renee
 2006-11-09 14:44
#71570 #71570
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht meinst Du ja:
Code: (dl )
1
2
3
4
5
6
7
8
foreach my $array ( @{$arrayRef} )
{
my @result;
while ($array->[1] =~ /<irgendeinmatch/igm) {
push @result, $1. " --> " . $2 . "\n";
}
print $array->[0],": ",join(" ",@result),"\n";
}
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/
Duff
 2006-11-09 15:16
#71571 #71571
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Danke, genau sowas meinte ich.

Habe es so gelöst:
Code: (dl )
1
2
3
4
5
6
7
8
foreach my $array ( @{$arrayRef} )
{
my @result;
while ($array->[1] =~ /irgendeinmatch/igm) {
push @result, $1. " --> " .$2. "\t";
}
printf "%-90s : %-s\n", $array->[0], join(" ",@result);
}


Kann man das Array @result auch "formatiert" füllen, wie z.B. mit printf?
D'OH
Daniel
renee
 2006-11-09 15:28
#71572 #71572
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, dafür musst Du dann sprintf verwenden, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
~/entwicklung 330> perl   
my @array;

for(1..10){
push @array, sprintf("%02d",$_);
}

print $_,"\n" for @array;


Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
01
02
03
04
05
06
07
08
09
10
\n\n

<!--EDIT|renee|1163078956-->
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/
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2006-11-08 16:50.