Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Tekstitiedoston lataus (QB)

Chaosworm [10.05.2007 20:40:45]

#

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!

Gaxx [10.05.2007 21:36:54]

#

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.

Chaosworm [10.05.2007 21:39:31]

#

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

Antti Laaksonen [10.05.2007 22:12:11]

#

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).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta