Miksi tämä koodi ei voi toimia?
print "["; path$; "]";: input "$", cline$
dim m$(7)
split(cline$, ";",m$(),0))
for laskuri = 0 to 7
print laskuri
if lcase$(m$(laskuri)) = "exit" then end
if lcase$(m$(laskuri)) = "clear" then cls
if lcase$(mid$(m$(laskuri), 1,2)) = "./" then shell path$ + "\" + rtrim$(ltrim$(mid$(cline$, 4,300)))
if lcase$(mid$(m$(laskuri), 1,2)) = "ls" then shell "dir | more"
if lcase$(mid$(m$(laskuri), 1,2)) = "cd" then path$ = ltrim$(rtrim$(mid$(cline$, 4,300))): chdir path$
if lcase$(mid$(m$(laskuri), 1,2)) = "rm" then kill ltrim$(rtrim$(mid$(cline$, 4,300)))
if lcase$(mid$(m$(laskuri), 1,3)) = "pwd" then print path$
if lcase$(mid$(m$(laskuri), 1,4)) = "echo" then echo (ltrim$(rtrim$(mid$(cline$,6,300))))
if lcase$(mid$(m$(laskuri), 1,5)) = "rmdir" then rmdir ltrim$(rtrim$(mid$(cline$, 7,300)))
if lcase$(mid$(m$(laskuri), 1,5)) = "mkdir" then mkdir ltrim$(rtrim$(mid$(cline$, 7,300)))
if lcase$(mid$(m$(laskuri), 1,5)) = "sleep" then sleep val(ltrim$(rtrim$(mid$(cline$, 7,300))))
next laskuri
goto prompt
FUNCTION split% (stringi$, erotin$, taulu$(), max%)
se$ = stringi$ 'ei rikota alkuper?ist? teksti?...
kohta% = INSTR(se$, erotin$) 'miss? kohdassa on eka erotin$
IF kohta% = 0 THEN EXIT FUNCTION'jos ei ole yht??n niin ei anneta yht??n
WHILE kohta% 'etsit??n lis?? kunnes ei erotinta l?ydy en??
taulu$(ne%) = LEFT$(se$, kohta% - 1) 'lis?t??n l?ydetty taulukkoon
se$ = MID$(se$, kohta% + LEN(erotin$)) 'irrotetaan jo l?ydetty
ne% = ne% + 1 'lis?t??n laskuria
kohta% = INSTR(se$, erotin$) 'miss? kohdassa seuraava erotin$
IF ne% = max% THEN 'jos ei haluta en?? niin ei anneta en??
split% = ne%
EXIT FUNCTION
END IF
WEND
taulu$(ne%) = se$ 'viimeinen osa
split% = ne% + 1 'kerrotaan montako l?ytyi
END FUNCTIONEli tuo on eräänlainen komentokehoite niin siinä pitäisi onnistua monen komennon suorittaminen samaanaikaan tjs..
esimerkki:
ls ; echo moi ; echo heh; sleep 5 ; echo olipa äsken tauko
niin se ensin näyttäisi hakemiston tiedostot ja sitten moi, heh, tulisi 5sekuntin tauko (FreeBasicissa pitää olla 5000) ja sitten taas tulee tekstiä, joka on "olipa äsken tauko". Minulla tuo ei tee mitään vaan suoritta vain ekan komennon/ei tee yhtikäs mitään.
Milläs FB:n versiolla olet kääntänyt?
Ainakin 0.14b antaa kääntäessä ilmoituksen
testii.bas(3) : error 71: Array not dimensioned, before: '('
split(cline$, ";",m$(),0))Aha... tuossa oli yksi virhe, kun itse yritin viritellä jotain purkkavirityksiä enkä itsekkään saanut juuri tuolla toimimaan mitään, mutta toiset koodipätkät taas toimivat siihen saakka, kunnes olisi pitänyt suorittaa monta komentoa kerrallaan.
Yksi virhe johtua siitä kun komentoa suoritetaan (if lauseen lopussa) niin mid kattoo arvon koko komento rivin alusta vaikka olisi jo viimeinen komento menossa eli muuta lopusta
$cline ---> m$(laskuri)
Ja pientä korjaus suositusta:
korvaa noi TRim ja LTrim lauseet pelkällä Trim:millä, joka poistaa välit automaatisesti alusta ja lopusta eli
RTrim + LTrim = Trim
Ja noi välilyöntejä ei tule jos korvataan toi mid lauseen 300 luku tälläi Len(Komento rivi kokonaan) - Komennon nimen pituus (Len functio palauttaa merkkijonon pituuden)
Ja toi lurahin kertoma virhe tulee siitä että split on functio ei subi
jolloin juhaz on tehny function, sliptin ja subin ristiriitaan.
Vaihda noi Function sanat Sub sanaoihin niin pitäisi toimia
Öh... meikä ei nyt ihan tajunnut? :D
Viitsitkö laittaa esimerkkikoodin niin jos ymmärtäis mitä tarkoitit...
Tarkastelin tota koodi vähän enemmän ja ymmärsin että Split Functio palauttaa komentojen määrän. taulukon osien määrän pystyy myös katsomaan Ubound käskyllä jolloin tuo For:rrin loppu olisi UBound(m$) (en taaskaan tiedä toimiiko tämä ubound QB/FB:ssä) Tässä koodissa pitäisi olla korjattuna ne virheet mitä luettelin edellisessa viestissä.
print "["; path$; "]";: input "$", cline$
Dim m$(7)
Dim monta
monta = split(cline$, ";", m$(), 0)
'Split palauttaa arvon kuinka monta komentoo löytyy
'ja laittaa lajittelun tulokset m$() taulukkoon
For laskuri = 0 To monta
Print laskuri
If LCase$(m$(laskuri)) = "exit" Then End
If LCase$(m$(laskuri)) = "clear" Then Cls
If LCase$(Mid$(m$(laskuri), 1, 2)) = "./" Then Shell Path$ + "\" + RTrim$(LTrim$(Mid$(m$(laskuri), 4, Len(m$(laskuri)) - 4)))
If LCase$(Mid$(m$(laskuri), 1, 2)) = "ls" Then Shell "dir | more"
If LCase$(Mid$(m$(laskuri), 1, 2)) = "cd" Then Path$ = Trim$(Mid$(m$(laskuri), 4, Len(m$(laskuri)) - 4)): ChDir Path$
If LCase$(Mid$(m$(laskuri), 1, 2)) = "rm" Then Kill Trim$(Mid$(m$(laskuri), 4, Len(m$(laskuri)) - 4))
If LCase$(Mid$(m$(laskuri), 1, 3)) = "pwd" Then Print Path$
If LCase$(Mid$(m$(laskuri), 1, 4)) = "echo" Then echo Trim$(Mid$(m$(laskuri), 6, Len(m$(laskuri)) - 6))
If LCase$(Mid$(m$(laskuri), 1, 5)) = "rmdir" Then RmDir Trim$(Mid$(m$(laskuri), 7, Len(m$(laskuri)) - 7))
If LCase$(Mid$(m$(laskuri), 1, 5)) = "mkdir" Then MkDir Trim$(Mid$(m$(laskuri), 7, Len(m$(laskuri)) - 7))
If LCase$(Mid$(m$(laskuri), 1, 5)) = "sleep" Then sleep Val(Trim$(Mid$(m$(laskuri), 7, Len(m$(laskuri)) - 7)))
Next laskuri
'GoTo prompt
'en tiedä missä kohti tämän promptin pitäis olla
Function split%(stringi$, erotin$, taulu$(), max%)
se$ = stringi$ 'ei rikota alkuperäistä tekstiä...
kohta% = InStr(se$, erotin$) 'missä kohdassa on eka erotin$
If kohta% = 0 Then Exit Function 'jos ei ole yhtään niin ei anneta yhtään
While kohta% 'etsitään lisää kunnes ei erotinta löydy enää
taulu$(ne%) = Left$(se$, kohta% - 1) 'lisätään läydetty taulukkoon
se$ = Mid$(se$, kohta% + Len(erotin$)) 'irrotetaan jo löydetty
ne% = ne% + 1 'lisätään laskuria
kohta% = InStr(se$, erotin$) 'missä kohdassa seuraava erotin$
If ne% = max% Then 'jos ei haluta enää niin ei anneta enää
split% = ne%
Exit Function
End If
Wend
taulu$(ne%) = se$ 'viimeinen osa
split% = ne% 'kerrotaan montako löytyi
End FunctionEi toimi vieläkään. Mielestäni kerran sain toimimaan kotona quickbasicilla koodatessa, mutta nyt olen 400-500km:n päässä Pohjois-Savossa ja minulla on nyt vain FreeBasic, koska Quickbasic 4.5:sta tai 7.1:stä ei löydy enään netistä oikein ollenkaan...
Tuo petrinm:n koodin pitäisi kyllä kääntyä uusimmalla FB:llä.
Oletkos installoinut sen kääntäjän oikein ja onko se myös se uusin versio?
En kokeillut kääntää mutta ainakin "silmissä käännöllä" sen pitäisi pelittää hyvin.
Olet installoinut kääntäjän oikein ja se on uusin versio, joka on saatavilla. Kyllä se kääntyy, mutta se ei silti toimi vielä oikein. Ei vaan pysty suorittamaan useaa komentoa kerrallaan eli jos mä laitan echo moi ; echo heh niin se näyttää vain ensinmäisen eli "moi".
Aihe on jo aika vanha, joten et voi enää vastata siihen.