Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Binaarista (QB)

Sivun loppuun

Grey [21.05.2004 14:27:04]

#

Miten binaaritallennusta oikein käytetään, niin että se myös toimisi? Sellaiselle olisi tarvetta, kun sillä saa tietoa tallennettua tiedostoon yhtenä jonona.

-Grey-

hunajavohveli [21.05.2004 14:33:02]

#

Tuon haluaisin tietää itsekin. Tiedän vain, että jotenkin:

OPEN "tiedosto" FOR BINARY AS #1

PUT ...?
GET ...?

CLOSE #1

Mutten tuon tarkemmin, sillä PUT:n ja GET:n parametrit ovat vielä hieman hämärän peitossa, vaikka onnistuinkin noilla lukemaan jotain tietoa esim. midi-tiedostoista.

rndprogy [21.05.2004 14:41:42]

#

OPEN "tiedosto" FOR BINARY AS #1
put #1, ,muuttuja ' tallennetaan
close
OPEN "tiedosto" FOR BINARY AS #1
get #1, ,muuttuja ' Ladataan
close

kas näin

Ja käytä RANDOMia BINARYN paikalla se toimii kuin APPEND. ymmärtääkseni

hunajavohveli [21.05.2004 14:43:52]

#

Noin minäkin onnistuin, mutta tuo keskimmäinen parametri (jonka nähtävästi voi jättää määrittelemättä) vielä vähän vaivaa. Kiinnoistaisi tietää, mitä virkaa sillä on.

sqwiik [21.05.2004 14:44:47]

#

No täältä sitten tulee infoa...
Kun tiedosto on ensin avattu binäärisenä, siihen voi sekä lukea että kirjoittaa (QB:ssä).
Parametrit ovat: GET/PUT #tiedosto, kursori, tieto. Kursori on kohta, josta tieto luetaan/johon se kirjoitetaan. Jos sen jättää tyhjäksi, GET lukee nykyisestä kohdasta, ja PUT kirjoittaa nykyiseen kohtaan. Aina GET/PUT:ia kutsuttaessa kursorin sijainti tiedostossa siirtyy eteenpäin. Kursorin sijainti on tiedostoa avattaessa 0. Kirjoitettavan tiedon pituus riippuu muuttujasta, johon/jolla tieto luetaan/kirjoitetaan, esim integer lukee/kirjoittaa 2 tavua, long 4 tavua ja string pituutensa verran tavuja.
Seuraava koodinpätkä kirjoittaa tiedostoon ensin 15 tavun merkkijonon ja sitten perään 4 tavua muuta (long), eli tiedoston pituus on tällöin 19 tavua.

DIM TEXTI AS STRING * 15 '15 merkkiä.
DIM MUUTTUJA AS LONG
TEXTI = "Moro kaikille!"
MUUTTUJA = 45
OPEN "koe.txt" FOR BINARY AS #1
PUT #1, , TEXTI
PUT #1, , MUUTTUJA
CLOSE #1

Jos stringiä ei määrittelisi fiksattuna, sen pituus olisi tekstin pituus. Fiksatussa taas loput ovat tyhjiä merkkejä. Ero? Luettaessa emme voi tietää, minkä mittainen merkkijono oli, joten siksi määrittelimme sen fiksattuna (15 merkkiä), joten lukekaamme 15 merkkiä :)

DIM TEXTI AS STRING * 15 '15 merkkiä.
DIM MUUTTUJA AS LONG
OPEN "koe.txt" FOR BINARY AS #1
GET #1, , TEXTI
GET #1, , MUUTTUJA
CLOSE #1

Vielä kursori-parametrista: en käyttänyt sitä tässä, koska se siirtyy automaattisesti: ensin se on 0, ja sitten kirjoitetaan 15 tavua jolloin kursori siirtyy eteenpäin tiedostossa 15 askelta. Samoin Long-muuttujan kanssa, 4 askelta. Sama luettaessa. Vastaavaan olisi päässyt mm. GET #1, 0, TEXTI ja GET #1, 15, MUUTTUJA.
Tietenkään kukaan ei estä sekoilemasta sijainnin kanssa... Esim. purettaessa palettia PCX-tiedostoista :)

Antti Laaksonen [21.05.2004 14:45:20]

#

Eli yksinkertaisesti muuttujat (tai tietueet tai taulukot) tallennetaan toistensa perään PUTilla ja luetaan samassa järjestyksessä GETillä. Komentojen ensimmäinen parametri on tiedoston tunnus, toinen kirjoitus- tai lukukohta tavuina ja kolmas muuttuja. Jos toisen parametrin paikalla on tyhjä, kirjoitus tai lukeminen tapahtuu siitä kohdasta, johon viimeksi jäätiin.

http://qb.ohjelmointiputka.net/?PUT
http://qb.ohjelmointiputka.net/?GET

hunajavohveli [12.06.2004 18:39:24]

#

No sanokaapas: Jos tallennan binaarina tiedostoon Integer-muuttujan, jonka arvo on 32767, niin onko se sama kuin tallentaisin tiedostoon kaksi tavun mittaista muuttujaa, joiden molempien arvo on 255? Näin ainakin kaiken logiikan mukaan päättelisin sen menevän.

setä [12.06.2004 19:00:28]

#

Ei oo sama. 255 ja 255 tarkoittaisi Integerinä lukua -32767 tai ainakin melkein. 127 ja 255 olisi oikein.

hunajavohveli [12.06.2004 19:09:09]

#

Aivan. Noinhan se tietysti menee. Eli se siis voisi olla 255 ja 255, jos Integer käsittäisi luvut 0-65535.


Sivun alkuun

Vastaus

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

Tietoa sivustosta