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
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.
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.
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 ;)
Väärinymmärrys, pyydän anteeksi.
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.
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
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.
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...
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 :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.