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?
Tuo Close lisää tiedostoon aina yhden nollan
Hmmm.. Hyvin outoa.. Niin, onko tuo Close välttämätön?
On jos et halua, että tiedosto jää auki.
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
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.. :)
^-^
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.