Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: VB 6 heksatiedostosta Accessiin

Sivun loppuun

inmemoriam [14.05.2004 13:55:01]

#

Eli tilanne on seuraava. Pitäisi lukea heksatiedostoa, jossa joka viides ja kuudes tavu sisältää tärkeää informaatiota. Ja rakenne taas toistuu kymmenen tavun välein eli esim.
18 00 01 00 G6 J6 00 00 09 91, jossa siis J6G6 on merkitsevä. Kysymys kuuluukin, että miten saisin tuon tiedon luettua ja kirjoitettua accessin tietokantaan. Olen itse hahmotellut seuraava lukufunktiota ja saanut tiedoston kopioitua, mutta nyt tuo viides ja kuudes kenttä pitäisi saada Accessiin joko heksalukuna tai desimaalilukuna.

Const FILE_INPUT As String = "C:\testfile.bin"
Const FILE_OUTPUT As String = "C:\TEST.BIN"

Dim arrBytes() As Byte
Dim intFileNum As Integer

ReDim arrBytes(0 To FileLen(FILE_INPUT) - 1) As Byte


intFileNum = FreeFile
Open FILE_INPUT For Binary Access Read As #intFileNum
Get #intFileNum, , arrBytes
Close #intFileNum

Open FILE_OUTPUT For Binary Access Write As #intFileNum
Put #intFileNum, , arrBytes
Close #intFileNum

End Sub

setä [14.05.2004 15:11:47]

#

Eikös TEST.BIN ole identtinen testfile.bin:in kanssa. Vai onko osa koodista pois. Accessiin voi lykäty nuo kaksi tavua kokonaislukuna vaikka boundatun tekstiruudun kautta.

Antti Laaksonen [14.05.2004 15:29:57]

#

Jos nyt ymmärsin tiedoston rakenteen oikein, niin lue tiedostosta kymmenen tavua kerrallaan ja lisää aina viides ja kuudes tavu tietokantaan. Tässä on esimerkki tavujen lukemisesta ja heksamuotoon muuttamisesta, nyt ne tulostetaan formille.

Dim tiedot(1 To 10) As Byte
Open "c:\testfile.bin" For Binary As #1
Do Until EOF(1) 'luetaan tiedoston loppuun saakka
    Get #1, , tiedot
    Print Hex(tiedot(5)) '5. tavu
    Print Hex(tiedot(6)) '6. tavu
Loop
Close #1

Toinen tapa on lukea koko tiedosto kerralla taulukkoon ja erotella sieltä oikeat tavut.

inmemoriam [14.05.2004 16:19:16]

#

Selitin asian ehkä hieman huonosti, koska alkuperäisellä tiedostolla tiedostomuotohan on tietenkin binääri, mutta luvut ovat siis heksalukuina tiedoston sisällä. Ja jos oikein tarkennan asiaa niin viidennen ja kuudennen tavun arvoa tulisi verrata tietokannan tietueeseen esim. Malli (joka on siis desimaalisena koodinumerona) ja jos sama desimaalikoodi (eli täytyy tehdä muunnos hex -> dec) löytyy, niin muutetaan tietueeseen Väri uusi ja päivittynyt heksakoodi joka on 10 tavun ensimmäinen koodi. (siis tässä uusi tavu olisi 18) Lähettäkää vaikka lisäkysymyksiä jos tästä mun selityksestä ei tajua mitään ;)

Meitzi [14.05.2004 19:23:17]

#

Väärinymmärrys, pyydän anteeksi.

Antti Laaksonen [14.05.2004 19:38:45]

#

inmemoriam kirjoitti:

Selitin asian ehkä hieman huonosti, koska alkuperäisellä tiedostolla tiedostomuotohan on tietenkin binääri, mutta luvut ovat siis heksalukuina tiedoston sisällä.

Pystyisitkö laittamaan jonnekin päin Internetiä tuollaisen tiedoston ladattavaksi, sillä nyt en kyllä ymmärrä, mitä tarkoitat? Tiedostossa olevan tavun voi esittää yhtä hyvin heksamuodossa kuin kymmenjärjestelmässä tai binäärilukunakin. Ja jos heksaluvut olisi tallennettu numeromerkkeinä, luvut veisivät tallennustilaa enemmän kuin vain yhden tavun kukin.

inmemoriam [14.05.2004 22:03:32]

#

Siis tiedosto on tämän tyylinen:
18 00 01 00 G6 J6 00 00 09 91 18 00 ; ....a..ö...ö
94 34 00 54 76 87 65 54 56 65 00 21 ; ..s.a....ä..
76 87 65 54 ; ..gh

Tuossa on kolme keksittyä pakettia eli 3 x 10 tavua. Ja se tuo muoto on mielestäni virallisesti "binary" vaikka tiedostossa muoto on heksatavuina. Ja ihan vaan selvennykseksi, että jos tiedoston avaa notepadilla niin tuloksena on vain merkkisössöä. Tiedosto tarvitsee siis avata editorilla. Tiedoston pääte on *.bin

setä [14.05.2004 22:31:36]

#

Editorisi muuttaa tiedostosta luetut tavut näytölle heksaluvuiksi ja oikeaan reunaan merkeiksi niiltä osin kun merkki löytyy. Tiedostossa ne ovat sellaisena mössönä juuri kuin Notepadilla näkyy.

Antti Laaksonen [14.05.2004 23:41:21]

#

Jotain outoa tässä jutussa nyt on. Jos tuon esimerkissä olevan tiedoston koko tosiaan on 30 tavua, jokaisen luvun on pakko vastata yhtä tavua tiedostossa. Ilmeisesti vasemmalla puolella on tavut heksamuodossa ja oikealla samat tavut merkkeinä, siis tavallinen heksaeditorin näkymä. Tiedoston sisällön voi näin esittää monella eri tavalla, vaikka oikeasti tiedostossa on vain joukko perättäisiä tavuja.

Kuitenkaan heksaluvut G6 ja J6 eivät ole mitenkään mahdollisia. Ja oikealla puolella olevat merkit eivät näytä vastaavan vasemman puolen tavuja.

Jos laittaisit sen tiedoston jonnekin ladattavaksi (tai lähetä vaikka sähköpostilla) niin ongelma ratkeaisi heti...

inmemoriam [15.05.2004 13:58:22]

#

Siis tuo oli vai esimerkki siitä näkymästä. Tiedän ettei heksaluvut G ja J ole mahdollisia, mutta nopeasti vain laitoin näppäimistöltä jotain merkkejä. Sovitaan sitten että ovat A6 ja F6. Ja noiden merkkien ei kuulukaan vastata, koska keksin ne vain nopeasti siihen. Kyllä se varmasti on tavallinen heksaeditorin näkymä, mutta kun en itse ole sellaisten kanssa touhunnut ollenkaan. Ja siis tiedostossa on vain joukko peräkkäisiä tavuja. Olen luultavasti tehnyt asiasta paljon vaikeamman kuin se oikeasti on :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta