Autor | Zpráva | ||
---|---|---|---|
SeparateSK Profil |
Dobrý deň, už dlhší čas robím script na konvertovanie PHP scriptov do jazyka zvaného Lua, nuž a problém je rozdielna syntax funkcie substr();
V PHP to vypadá asi takto: $text="Ahoj, ako to ide?"; $zaciatok=5; $pocet_pismen=strlen($text)-5; $vysledok=substr($text,$zaciatok,$pocet_pismen); local text="Ahoj, ako to ide?"; local zaciatok=5; local koniec=text:len(); --alebo string.len(text); local vysledok=text:sub(zaciatok,koniec); --alebo string.sub(text,...) $line="echo substr($text,5,8)"; $line=preg_replace("/substr\((.*)\,(.*)\,(.*)\)/","$1:sub($2,$3)",$line); Takže by som chcel vedieť či je možné niečo ako $3-$2 v druhom parametri preg_replace-u , aby to odčítalo $2 od $3. Ako druhé riešenie vidím, že môj konvertér pridá do vygenerovaného Lua-scriptu funkcie z PHP. Teda: function php_substr(text,start,count) return text:sub(start,math.abs(count+start)-1); end |
||
Str4wberry Profil |
#2 · Zasláno: 4. 1. 2013, 18:24:49
|
||
SeparateSK Profil |
Vďaka!
Tu je script: function LuaSubStrCallBack($params){ return "$params[1]:sub($params[2],".(($params[3]+$params[2])-1).")"; } //... $line=preg_replace_callback("/substr\((.*)\,(.*)\,(.*)\)/","LuaSubStrCallBack",$line); Str4wberry: „Jinak není na zmíněný převod nějaké hotové řešení?“ Všetky výsledky ukazujú na "knižnicu" pre PHP, aby to dokazalo spustiť Lua script, ale ja robím script, ktorý daný kód prepíše do daného jazyka. |
||
Tori Profil |
SeparateSK:
$pocet_pismen=strlen($text)-5; $vysledok=substr($text,$zaciatok,$pocet_pismen); $vysledok = substr($text, $zaciatok, -5); Možná by šlo generovat odlišný kód podle toho, je-li v PHP 3.param. kladný nebo záporný, a pro kladný přidat v Lua příkaz na zjištění pozice posledního požadovaného znaku.
↓: Jen detail: Lua indexuje řetězce od jedničky, ne od nuly jako PHP. |
||
SeparateSK Profil |
Máte pravdu, na tieto veci som vôbec ani nepomyslel :)
Teda teraz to vypadá asi takto: function LuaSubStrCallBack($params){ $ex=explode(",",$params[2]); $params[2]=$ex[0]; $params[3]=$ex[1]; $res=(($params[3]+$params[2])-1); //ak su 3 parametre a vsetky > 0 $final="$params[2],$res"; if($params[3]<0) //ak je zaporne $final="$params[2],$params[3]"; if(!is_numeric($params[3])) //ak su iba 2 parametre $final="$params[2]"; return "$params[1]:sub($final)"; } //ostatný kód... (prepisovanie if,while,foreach,for,do,function,echo,class...) $line1="echo substr('Ahoj',0,-2)"; $line2="echo substr('Ahoj',0,1)"; $line3="echo substr('Ahoj',2)"; $line1=preg_replace_callback("/substr\((.*),(.*)\)/siU","LuaSubStrCallBack",$line1); $line2=preg_replace_callback("/substr\((.*),(.*)\)/siU","LuaSubStrCallBack",$line2); $line3=preg_replace_callback("/substr\((.*),(.*)\)/siU","LuaSubStrCallBack",$line3); //vysledky: //print('Ahoj':sub(0,-2)) //print('Ahoj':sub(0,0)) //print('Ahoj':sub(2)) |
||
Časová prodleva: 11 let
|
0