Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Ongelmia heksadesimaalien kanssa.. \VB

Sivun loppuun

TH [02.02.2004 20:00:57]

#

Edellinen ohjelmani jossa pelasin heksadesimaalien kanssa toimii moitteettomasti ja on valmis, mutta nykyisen kanssa on joitain outoja ongelmia..

' tallennus

  Open file$ For Binary As #1

  Put #1, 1, 0
  Put #1, 2, 0
  Put #1, 3, 0
  Put #1, 4, 0

  Close #1

Vaikka tuossa tallennetaan 4 heksaa, tiedostoa heksaeditorilla tutkiessa sen sisältö näyttää tältä: 00 00 00 00 00. Eli heksoja onkin 5..
Voikohan tuota korjata mitenkään?

setä [02.02.2004 21:27:47]

#

Tuo Close lisää tiedostoon aina yhden nollan

TH [02.02.2004 21:53:50]

#

Hmmm.. Hyvin outoa.. Niin, onko tuo Close välttämätön?

rndprogy [02.02.2004 22:25:46]

#

On jos et halua, että tiedosto jää auki.

Antti Laaksonen [03.02.2004 16:44:18]

#

Close ei lisää mitään tiedoston loppuun, vaan syy ongelmaan on ihan muualla. Nimittäin kun lukujen muuttujatyyppiä ei ole annettu, VB ilmeisesti olettaa niiden olevan Integer-tyyppisiä. Tällaisen muuttujan tilanvaraus on taas kaksi tavua. Kun tiedoston kirjoituskohdat on annettu, muut muuttujat menevät toistensa päälle paitsi viimeinen, joka aiheuttaa ylimääräisen tavun tiedoston loppuun. Ratkaisu on tallentaa luvut Byte-tyyppisinä, mihin tarvitaan erillistä muuttujaa.

Dim x As Byte
x = 0
Open file$ For Binary As #1
Put #1, 1, x
Put #1, 2, x
Put #1, 3, x
Put #1, 4, x
Close #1

TH [03.02.2004 16:50:22]

#

Olisi pitänyt tuo heti tajuta, mutta en tajunnut.. Kiitos paljon! :)
Tosiaan, edellisessä ohjelmassa olin määritellyt taulukon "byteinä" ja sen tallentaminen kävi sen vuoksi ongelmitta.. Ja nyt kun en sitten tajunnut määritellä niin ei toiminutkaan.. :)
^-^

setä [03.02.2004 17:17:44]

#

Hyvä että selvisi. Mutta mistä johtuu, että kun tiedoston avaa ja sulkee tallentamatta mitään, sinne kuitenkin tulee 0.
Kokeilin noilla Byteillä, mutta kyllä se ylimääräinen nolla tulee niilläkin. Tai jos lykkää Integer-tyyppisen luvun, siinne tulee kolme tavua, viimeisenä nolla.
Tiedostoa en tutkinut heksaedittorilla vaan luin tiedostoa tavu kerraallaan kunnes EOF(1) = True.

setä [03.02.2004 18:00:44]

#

Taitaa tuo nolla ilmaantua tuosta lukurutiinista. Kyllä, LOF(1)-funktio antaa tiedostolle oikean pituuden eli se viimeinen 0-tavu jää pois. EOF(1) ei siis saa arvoa True vaikka tiedosto on luettu loppuun.


Sivun alkuun

Vastaus

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

Tietoa sivustosta