Tein tässä tällasen:
DECLARE SUB tallenna () alku: ON ERROR GOTO virhe LOCATE 5, 2: PRINT "Kuinka paljon aikaa on kulutettu tietokoneella:" OPEN "ajat.txt" FOR INPUT AS #1 DO INPUT #1, aika1, aika2, aika3, aika4 PRINT "JOKU: "; aika1 PRINT "JOKU: "; aika2 PRINT "JOKU: "; aika3 PRINT "JOKU: "; aika4 LOOP UNTIL EOF(1) = -1 main: aika = 0 PRINT "Valitse henkilö. 1 = joku, 2 = joku, 3 = joku, 4 = joku" INPUT nimi GOTO laskenta laskenta: CLS DO LOCATE 3, 10 PRINT "Olet ollut nyt "; aika; " sekuntia tietokoneella." LOCATE 4, 10 PRINT "Lopeta laskenta painamalla <ENTER>." SLEEP aika = aika + 1 LOOP UNTIL INKEY$ = CHR$(13) tallenna virhe: CLS BEEP COLOR 12 PRINT "Tapahtui virhe." SUB tallenna CLS PRINT "Tällä kertaa olit "; aika; "sekuntia tietokoneella." IF nimi = 1 THEN aika1 = aika1 + aika IF nimi = 2 THEN aika2 = aika2 + aika IF nimi = 3 THEN aika3 = aika3 + aika IF nimi = 4 THEN aika4 = aika4 + aika PRINT "Yhteensä olet ollut "; IF nimi = 1 THEN PRINT aika1; " sekuntia tietokoneella." IF nimi = 2 THEN PRINT aika2; " sekuntia tietokoneella." IF nimi = 3 THEN PRINT aika3; " sekuntia tietokoneella." IF nimi = 4 THEN PRINT aika4; " sekuntia tietokoneella." OPEN "ajat.txt" FOR OUTPUT AS #2 PRINT #2, aika1, aika2, aika3, aika4 CLOSE #2 SLEEP GOTO main END SUB
Tutkiakseni, että kuka perheen neljästä henkilöstä on keskimäärin tietokoneella (eli siis minä, mutta haluan tietää, kuinka paljon muut ovat), tein tuollaisen. Joku ei toimi siinä "ajat.txt"n lataamisessa. Alussa se toimii, mutta kun tulee aika tallentaa muutokset siihen, niin se heittää sen virheilmoituksen.
Kiitos auttajille jo etukäteen!
Väitän, että ohjelma suorittaa tallentamiset yms. kuten pitääkin, mutta jatkaa ohjelman suoritusta siitä eteenpäin, eli tässä tapauksessa "tallenna" aliohjelman jälkeen tulee "virhe:" osio joka suoritetaan heti perään. Laita siihen vaikka "END" niin ohjelman suoritus lakkaa talletusten jälkeen.
Oho, niimpäs onkin. Luulin, että tuo GOTO tuolla tallenna-subissa heittäisi sen siihen main-ruutuun...
No, korjasimpahan ongelman. ja se heittää sitä virheilmoitusta edelleen :( kokeilin siirtää sitä myöskin sinne välikköihin, ei auttanut. Ja se tiedosto näyttää edelleen tältä:
0 0 0 0
Voit lisätä virheenkäsittelyyn tämän rivin:
PRINT "Virheen numero: "; ERR
Vastaavalla numerolla löytyy QB:n ohjeesta selitys virheestä, joka yleensä helpottaa ongelman paikannusta.
Yksi virhe on ainakin siinä, että et sulje tiedostoa "ajat.txt" sen lukemisen jälkeen. Tämän vuoksi samaan tiedostoon ei voi myöhemmin tallentaa, koska se on vielä varattuna lukemista varten.
Ajan mittaus ei taida nykyisellään toimia, koska pelkkä SLEEP
odottaa loputtomiin. Mutta jos muutat komennon muotoon SLEEP 1
, lopputulos on varmaankin haluamasi.
Aliohjelmassa täytyy ottaa huomioon, että siellä ei voi käyttää suoraan pääohjelman muuttujia eikä myöskään siirtyä pääohjelman nimiöihin GOTO
-komennolla. Tässä tapauksessa aliohjelma taitaa olla aika turha, koska siihen mennään vain kerran määrätyssä vaiheessa. Eli voit kirjoittaa koodin suoraan siihen kohtaan, jossa tällä hetkellä siirryt aliohjelmaan.
Monessa muussa tilanteessa aliohjelmat ovat kuitenkin hyödyllisiä. Jos niihin pitää välittää jotain tietoa, tämä tapahtuu joko parametrien avulla (tulevat sulkuihin aliohjelman nimen jälkeen) tai globaalien muuttujien avulla (määritetään pääohjelmassa komennolla DIM SHARED
).
Aihe on jo aika vanha, joten et voi enää vastata siihen.