Kun lisäät tämän funktion QBasic-ohjelmaasi, on käytettävissäsi strreplace-niminen funktio, joka toimii aivan samalla tavalla kuin PHP:n str_replace.
FUNCTION strreplace$ (vanha AS STRING, uusi AS STRING, teksti AS STRING) DO UNTIL INSTR(teksti, vanha) = 0 kohta% = INSTR(teksti, vanha) teksti = LEFT$(teksti, kohta% - 1) + uusi + MID$(teksti, kohta% + LEN(vanha)) LOOP strreplace$ = teksti END FUNCTION
En saanu toimiin!
Kopioi vain tuo funktio QBasic-ohjelmaasi. Sen jälkeen funktion pitäisi näkyä listalla, kun painat F2.
Ja funktion käyttöesimerkki:
PRINT eregreplace("ei toimi","toimii","Tämä ei toimi")
Miten saan sen sillain, et se muuttaa vaikka een peeks?
Ja tota esimerkkiä en oikein tajunnu!
No näin:
PRINT eregreplace("e","p","eeee")
Eihän tuo toimi sinnepäinkään kuin PHP:n ereg_replace()... Missäs tuo parsii ne regexp-hommelit? Tuo vastaa PHP:n str_replace() -funktiota...
Näin on. Vinkkiä kirjoittaessani en vielä ollut tutustunut tarkemmin funktion lisäkäyttötarkoituksiin.
Vaihdoin nyt koodivinkin nimen hieman oikeammaksi. Parempi myöhään kuin ei milloinkaan.
Yksi ongelma tuossa vain on, joka itsellänikin on monta kertaa tullut vastaan replace-funktiota tehdessä. Nimittäin se, että ohjelma jää ikuiseen silmukkaan, jos uuteen tekstiin sisältyy jokin korvattava teksti.
Esim.
PRINT strreplace$("a", "ba", "bbb")
Tällöin funktio löytää a:n myös juuri luomastaan ba:sta, ja yrittää vaihtaa senkin tilalle ba:n. Ja tällöin syntyy taas uusi ba, ja tätä jatkuu teoriassa loputtomiin.
Heippa!
'VB-style REPLACE funktio QBasic:lle DECLARE FUNCTION REPLACE$ (mjono$, korvattava$, korvaava$) 'Testi mjono$ = "haloo miss molly" PRINT REPLACE(mjono$, "haloo", "hello") mjono$ = "haloo tissi molly" PRINT REPLACE(mjono$, "tissi", "miss") mjono$ = "miss mollyn tissit roikkuu" PRINT REPLACE(mjono$, "roikkuu", "hyllyy") SYSTEM FUNCTION REPLACE$ (mjono$, korvattava$, korvaava$) IF INSTR(mjono$, korvattava$) = 0 THEN REPLACE$ = mjono$: EXIT FUNCTION ELSE DO SELECT CASE INSTR(mjono$, korvattava$) CASE IS = 1 mjono$ = korvaava$ + RIGHT$(mjono$, LEN(mjono$) - LEN(korvattava$)) CASE IS = LEN(mjono) - LEN(korvattava$) mjono$ = LEFT$(mjono$, INSTR(mjono$, korvattava$) - 1) + korvaava$ CASE ELSE alku$ = LEFT$(mjono$, INSTR(mjono$, korvattava$) - 1) loppu$ = MID$(mjono$, INSTR(mjono$, korvattava$) + LEN(korvattava$)) mjono$ = alku$ + korvaava$ + loppu$ END SELECT LOOP UNTIL INSTR(mjono$, korvattava$) = 0 END IF REPLACE$ = mjono$ END FUNCTION
Aihe on jo aika vanha, joten et voi enää vastata siihen.