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);
Lenže v Lua-e to je:
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,...)
Najprv ma napadlo niečo ako toto, len samozrejme odčítať to nevie.
$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
Ano, pomocí preg_replace_callback.

Jinak není na zmíněný převod nějaké hotové řešení?
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);
Trochu mi připadá, že si podvědomě přizpůsobujete PHP tak, aby se lépe konvertovalo do Lua. V PHP není přece potřeba zjišťovat délku řetězce, ale napíšu prostě $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))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: