WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   PERL: variable befüllen (http://www.wcm.at/forum/showthread.php?t=167534)

RaistlinMajere 06.06.2005 19:39

PERL: variable befüllen
 
ich habe folgendes problem:

aus einer DB lese ich einen string aus, der z.b. so aussieht

"blablabla_$var_blabla"

diesen füge ich wo ein, davor habe ich jedoch der variable $var einen bestimmten wert gegeben, von dem ich nun möchte, daß er in dem eingefügten string aufgelöst aufscheint.

geht das?

waquner 11.06.2005 20:20

in deinem beispiel löst der interpreter $var_blabl als variable auf nicht $var... richtig wäre also "blabla_$var"."_bla" ( den . gibts doch in perl auch nicht nur in php oder?)

jak 12.06.2005 11:16

Die Frage ist wie Variabel es sein muss. Am einfachsten ist es, wenn als Variablenname nur z.B. "$var" vorkommt, und $var nur einmal im String vorkommt.
Das ginge in php mit:
Code:

$result=str_replace ( "_$var_", $var, "blablabla_$var_blabla");
Wenn der Variablenname unbekannt ist:
Code:

$varInDb="blablabla_$var_blabla";
$result="";
$startPos=strpos($varInDb,"_$");
if($startPos===false){
  $result="Keine Variable vorhanden";
} else {
  $endPos=strpos($varInDb,"_",$startPos);
  $varName=substr($varInDb, $startPos, $endPos - $startPos);
  $result=substr($varInDb, 0, $startPos) . $$varName . $substr($varInDb, $endPos);
}

Beim zweiten Codeblock müsstest du austesten wie perl bzw. php die Zeichen in Strings zählt (bei 0 beginnend, wo beginnt der Suchstring usw). Eventuell musst du z.B. bei $startPos noch 1 oder 2 dazuaddieren.

Ich kenn mich mit Perl leider nicht aus, vielleicht musst du mit unpack() und pack() arbeiten.
Strings ersetzen geht dort irgendwie mit s/ersetzeDas/durchDas
Du kannst dich auch mit folgenden Dingen spielen:
$varInDb=~/_$[a-zA-Z]+_/
$` sollte dann "blablabla" sein
$& sollte _$var_ sein
$' sollte blabla sein

Vielleicht helfen dir auch die Punkte 9-11 dort weiter: http://www.perl-archiv.de/perl/tutor...rl_start.shtml

hth,
Jak


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag