Thema: umdrehen und filtern innerhalb einer substitution
nabend,<p>ich dreh echt noch am Rad. Ich probier seit drei Tagen ein Problem zu lösen und komm einfach nicht weiter. Vielleicht könnt ihr mir ja helfen. Ist echt ne Herausforderung, zumindest für micht.<p>also. Gegeben ist folgendes:<p><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr><pre>
$_ = '#IORG# Geffert, Johannes #OD# Scheerer, Ingeborg #OR# Johann Christian Bach-Akademie';<p>%instrumente = ( '#IORG#' => 'Orgel',
'#OD#' => 'Dirigent / Band Leader',
'#OR#' => 'Orchester (Instrumentalensemble / Sinfonieorchester)');
</pre><hr></blockquote>
Dies sind auszüge aus einer sehr umfangreichen Liste die Kürzel für Instrumente beinhaltet und ein Auszug aus einer noch umfangreicheren Liste die für einen CD Titel (nicht mit aufgeführt) eine Liste von Artisten enthält.<p>Problemstellung:<p>es soll was in der Art:<p>Geffefert, Johannes (Orgel)<br>Scheer Ingeborg(Dirigent / Band)<br>Johann Christian Back Akademie(Orchester ...) <p>ausgegeben werden.
ich hab bis jetzt echt alles probiert.<p><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr><pre>
foreach $s ( keys ( %instrumente) ) {
s/$s/$instumente{$s}/ig;
}
</pre><hr></blockquote>
ersetzt mir zwar die Schlüssel der Instrumente aber die Reihenfolge stimmt nicht (Artist (Instrument)). Weiter werden auch durch die Zufälltige anordnug der Schlüssel im Hash %instrumente die Reihenfolge innerhalb des Eintrags durcheinadergewürfelt.<p>Weiter hatte ich echt total viele Ansätze die aber allesamt in die Hose gingen:<p>z.B
<blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr><pre>
while(/(#.+?#)/g) {
s/($1)(.+?)#/$2$1#/;
}
</pre><hr></blockquote>
wär für mich auch logisch. Solange er ne # bis alles bis zu dem nächsten # findet soller sich das merken und das was er gemerkt hat durch das was folgt vertauchen /$2$1/ den # muss man meines erachtens noch dranhängen weil er sonst die nächste Zeichenfolge #xxx# nicht findet. <p>... Klappt aber auch nicht.<p>besser wärs ja noch so gewesen:<p><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr><pre>
while(/(#.+?#)/g) {
foreach $s (keys (%instrumente) ) {
if($s eq $1) {
s/($1)(.+?)/$instrumente{$s}$1/;
}
}
}
</pre><hr></blockquote><p>aber irgenwie klappt das alles nicht. Ich hab auch schon probiert die ganze Sache nach # in splitten zu lassen und nach (% 2 == 0) in zwei Arrays zu speichern und hinterher wieder zusammenzusetzen aber nix funzt. Ich bin echt am verzweifeln. <p>Wenn einer ne Idee hat wär echt super.<p>danke, sel.