webForumDet fria alternativet

Ersätta med variabelvärde...

Perl & Ruby

4 svar · 480 visningar · startad av Csson

Medlem sedan feb. 2000438 inlägg
Frågan#1

Har problem med ett script. Jag läser in en fil med html-kod (all text är på första raden) till @headfile ($head = $headfile[0]). I filen har jag speciella taggar (ser ut så här: <%tagg%> ) som jag vill byta ut till värdet på motsvarande variabel (ex $tagg).

Om jag gör:

$head =~ s/<%tagg%>/$tagg/g;

skrivs "$tagg" ut och

if($head =~ /<%tagg%>/) {
print $tagg;
$head =~ s/<%tagg%>//g;
}

skriver ut värdet, men före resten av $head.

Hur kan jag ersätta <%tagg%> med $tagg-värdet på rätt plats?

/Csson

Medlem sedan nov. 19991 033 inlägg
#2

Du kanske kan testa lite med varianter på denna lopen.

for (@head) {
s/<%tagg%>/$tagg/g;
}

Medlem sedan dec. 19992 555 inlägg
#3

Csson:

Förstår inte frågan riktigt, ärligt talat. Är du ute efter något generellt regexp som byter ut <%whatever%> mot innehållet i variabeln $whatever (oberoende av vad "whatever" är för något)? Är i.a.f. så jag tolkar din fråga (men FlashX har uppenbarligen tolkat det annorlunda, så du kanske kan förklara lite mer vad du är ute efter).

Om jag har tolkat dig rätt, prova med:

$head =~ s/<%(.*?)%>/${$1}/eg;

Om du använder use strict; i ditt script kommer Perl att klaga över denna rad - använd i så fall no strict "ref"; innan substitutionen.

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 09 feb 2000]

Medlem sedan feb. 2000438 inlägg
#4

Tack för hjälpen,

Jag försökte en variant på den,

for($a = 0; $a < @head; $a++) {
$_ = $head[$a];
if(/(.*?)<%realcount%>(.*?)/) {
print $1;
print $realcount;
print $2;
}
else {
print "$_";
}
}

som av någon anledning bara skriver ut $1 och $realcount men inte $2.

Tills vidare har jag löst det genom att kräva att <%taggarna%> är på egna rader:

for($a = 0; $a < @head; $a++) {
$_ = $head[$a];
if(/<%realcount%>/) {
print $realcount;
}
else {
print "$_";
}
}

/Csson

[Redigerat av Csson den 09 feb 2000]

Medlem sedan dec. 19992 555 inlägg
#5

Varför inte kort och gott:

foreach (@head) {
s/<%realcount%>/$realcount/g;
print;
}

------------------
Robban < robban@lipogram.com >

259 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)