Otsikko ehkä huono, mutta kuitenkin.
Pitäis saada tehtyä semmoinen homma että kun, joku kirjoittaa kommenttia ja haluaa vaikka muuntaa xx celciusta xx fahrenheittiin käyttäen tälläistä menetelmää (esimerkki post):
"Vesi kiehuu 100c asteessa (fahrenheitteina se on convert(1,100))"
Ja tulostus olisi:
"Vesi kiehuu 100c asteessa (fahrenheitteina se on 212f)"
Miten tommonen onnistuisi?
function fahr($f) { $f = $f * $jtn; return $f; }
En tiä miten fahrenheit lasketaan.
Taisit missata koko homman pointin, esim. tämäki ku kirjoitan, ja haluaisin textfield inputissa olevan komennon tekemään asioita. Miten saisin sen poimittua tekstin seasta.
Pitäiskö käyttää eregiä?
Haluat siis tunnistaa tekstin joukosta jonkun luvun, joka muistuttaa lämpötilaa? Helpoiten onnistunee vaikkapa perl-yhteensopivilla preg_replace functiolla. Laitetaan vaikkapa:
$teksti = "13 celsiusta 13*C = fahrenheitia";
Tästä tunnistetaan 13*C säännöllisellä lausekkeella ja muunnetaan se fahrenheiteiksi.
<?php function Muunna($c){ $f = (9/5)*$c+32; return $f; } $teksti = "13 celsiusta = 13*C fahrenheitia"; $teksti = preg_replace("/(\\b[0-9]*\\b)\\*C/e", "Muunna(\\1)", $teksti); echo $teksti; ?>
Hmm, toi näyttää hyvältä. Mutta itellä olisi suunitelmana että ois tämmönen toi muuntaja funktio:
<?php function muuntaja($type, $value) { switch($type) { case 1: // C to F $sum = (9/5)*$value+32; break; case 2: // F to C $sum = ($value-32)/(9/5) break; // ja lisää kaavoja..... return $sum; } } ?>
Menisikö se tohon preg_replace kohtaan jotenkin tälläin....
<?php $teksti = preg_replace("convert(/([0-9]+)\,/([0-9]+)/e)", "muuntaja(\\0,\\1)", $teksti); ?>
EDIT:
Jees, elikkä muuntamalla tota replace lausetta sain toimimaan, tämmöseksi se piti muuttaa:
<?php preg_replace("/convert\(([0-9]),([0-9])\)/e", "converter(\\1,\\2)", $teksti); ?>
Tuossa vaaditaan käyttäjältä function tunteminen ennalta. Jokaisen joka kirjoittaa sivullesi tulee tietää, että 1 tarkoittaa muunnosta C -> F jne...
Parempi olisi ehkä tehdä looginen muunnos jotenkin näin:
<?php function Muunna($luku, $tyyppi){ $muunnos = 0; switch($tyyppi){ case "CF": $muunnos = (9 / 5) * $luku + 32; break; case "FC": $muunnos = (5 / 9) * ($luku - 32); break; } return round($muunnos, 2); } $luku = 55; $teksti = "12 astetta Celsiusta = 12*CF Fahrenheitia <br /> 12 astetta Fahrenheitia = 12*FC Celsiusta"; $teksti = preg_replace("/(\\b[0-9]*\\b)\\*([A-Z]+)/e", "Muunna(\\1, \\2)", $teksti); echo"<br /> $teksti"; ?>
Kokeilin sellaistakin, että laittaisi 12*C -> F , mutta tuo ei jostain syystä kelvannut PHP:e. Tuolla lailla se olisi mielestäni mukava ainakin käyttää. Saisikohan tuon jotenkin toimimaan. Minulla oli silloin näin tuo tunnistus.
<?php $teksti = "12 astetta Celsiusta = 12*C -> F Fahrenheitia <br /> 12 astetta Fahrenheitia = 12*F -> C Celsiusta"; $teksti = preg_replace("/(\\b[0-9]*\\b)\\*([A-Z]*\\s\\-\\>\\s[A-Z]*)/e", "Muunna(\\1, \\2)", $teksti); //Antaa seuraavat ilmoitukset: Parse error: parse error in h:\program files\easyphp1-8\www\test.php(21) : regexp code on line 1 Fatal error: Failed evaluating code: Muunna(12, C -> F) in h:\program files\easyphp1-8\www\test.php on line 21 ?>
Eli jokin kirjoitusvirhe ja sen johdosta functiota Muunna ei voi evauoida?
Teksti luutavasti pitää laittaa hipsuihin tai lainausmerkkeihin.
Teuro kirjoitti:
Tuossa vaaditaan käyttäjältä function tunteminen ennalta. Jokaisen joka kirjoittaa sivullesi tulee tietää, että 1 tarkoittaa muunnosta C -> F jne...
Se on vähän sama kuin täällä, kaikkien pitää tietää että koodiphp mahdollistaa php koodin oikeanlaisen tulkkauksen :) Elikkä kyllä ohjeet löytyy kun kirjoittaa, http://gurnarok.com/conver.php
Niko kirjoitti:
Teksti luutavasti pitää laittaa hipsuihin tai lainausmerkkeihin.
Tekstihän on lainausmerkeissä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.