Miten VB6:sessa ladataan koneella oleva tiedosto muistiin myöhempää prosessointia varten ? Vai eikö ole mahdollista käsitellä muistissa olevaa tiedostoa ?
Tiedoston lataus muistiin tarkoittaa, että määritetään sopivan kokoinen taulukko ja luetaan siihen tiedostossa olevat tiedot.
Jos haluat ladata tiedoston tavut sellaisenaan, seuraava koodi toimii:
Dim tiedosto As String tiedosto = "c:\omat\testi.dat" Open tiedosto For Binary As #1 ReDim tiedot(LOF(1) - 1) As Byte Get #1, , tiedot Close #1
Tiedoston sisällön voi näyttää vaikkapa heksaeditorin tavoin:
Cls FontName = "Courier" Dim i As Integer For i = 0 To UBound(tiedot) Print Right("00" & Hex$(tiedot(i)), 2) & " "; If i Mod 16 = 15 Then Print Next
Mutta kerropa, mitä olet tarkalleen tekemässä, niin pystyn vastaamaan paremmin.
Teen softaa joka sisältää kaikkea mahdollisia ohjelmapätkiä ja toimintoja kun isän yrityksessä olisi tarvetta sellaisella. Suurinta ongelmaa toistaiseksi aiheuttaa kalenteri jonka päivämääriin pitäisi saada tietoa ja ne sitten tallennettua koneelle.
Voisitko kertoa jokaisen pienenkin asian mitä tuo toinen koodi tarkalleen tekee joka kohdassa ?
Tässä on ohjelman moduulista koodi joka sisältää muuttujat. En keksi koodia millä automatisoidusti ladataan jokaisesta tallennustiedostosta tiedot jokaiselle päivälle jokaisen päivän omaan muuttujaan. Kalenterin formin nimi on frmCalendar ja kalenterikontrollin nimi siellä on Calendar1. Käytössä on access Calendar Control 7.0 FI.
Option Explicit Public Const SoftwareSettings = "C:\betasofta v0.1 - asetuskansio\betasofta v0.1 asetukset.txt" Public Const CalendarSettings = "C:\betasofta v0.1 - asetuskansio\betasofta v0.1 - Kalenterin asetukset.txt" Public Const CalendarSaveMonth1 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 1.txt" Public Const CalendarSaveMonth2 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 2.txt" Public Const CalendarSaveMonth3 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 3.txt" Public Const CalendarSaveMonth4 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 4.txt" Public Const CalendarSaveMonth5 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 5.txt" Public Const CalendarSaveMonth6 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 6.txt" Public Const CalendarSaveMonth7 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 7.txt" Public Const CalendarSaveMonth8 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 8.txt" Public Const CalendarSaveMonth9 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 9.txt" Public Const CalendarSaveMonth10 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 10.txt" Public Const CalendarSaveMonth11 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 11.txt" Public Const CalendarSaveMonth12 = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi 12.txt" Public Const Month1 = 31 Public Const Month2 = 29 Public Const Month3 = 31 Public Const Month4 = 30 Public Const Month5 = 31 Public Const Month6 = 30 Public Const Month7 = 31 Public Const Month8 = 31 Public Const Month9 = 30 Public Const Month10 = 31 Public Const Month11 = 30 Public Const Month12 = 31 Dim MaxDayPerMonth(Month1 To Month12) Dim arrayCalendarSaveMonth1(1 To Month1) Dim arrayCalendarSaveMonth2(1 To Month2) Dim arrayCalendarSaveMonth3(1 To Month3) Dim arrayCalendarSaveMonth4(1 To Month4) Dim arrayCalendarSaveMonth5(1 To Month5) Dim arrayCalendarSaveMonth6(1 To Month6) Dim arrayCalendarSaveMonth7(1 To Month7) Dim arrayCalendarSaveMonth8(1 To Month8) Dim arrayCalendarSaveMonth9(1 To Month9) Dim arrayCalendarSaveMonth10(1 To Month10) Dim arrayCalendarSaveMonth11(1 To Month11) Dim arrayCalendarSaveMonth12(1 To Month12)
Tässä yksi ratkaisu.
En ole varma koodin toimivuudesta, kun en pääse kääntämään mutta tähän tyyliin.
Option Explicit Public Const SoftwareSettings = "C:\betasofta v0.1 - asetuskansio\betasofta v0.1 asetukset.txt" Public Const CalendarSettings = "C:\betasofta v0.1 - asetuskansio\betasofta v0.1 - Kalenterin asetukset.txt" Public Const CalendarFile = "C:\betasofta v0.1 - datakansio\betasofta v0.1 - Kalenterin tallennustiedosto, kuukausi" Dim MaxDayPerMonth(1 To 12) As Integer Dim arrayCalendarSaveMonth(1 To 12, 1 To 31) As String Sub Lataa() MaxDayPerMonth = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) Dim i As Integer Dim a As Integer Dim rivi As String For i = 1 to 12 ' Avataan tiedosto Open CalendarFile & i & ".txt" For Output As #1 ' Käydään tiedostoa rivi riviltä kunnes se loppuu Do Until EOF(1) a = a + 1 ' lisätään rivilaskuriin yksi Line Input #1, rivi ' luetaan rivi arrayCalendarSaveMonth(i, a) = rivi ' talletetaan rivi If MaxDayPerMonth(i) = i Then End Loop 'tarkistus ettei luetaa ylimääräistä Loop Close #1 'Suljetaan tiedosto a = 0 ' nollataan rivi laskuri Next i End Sub
Luulen että ymmärsit koodini paremmin kuin itse :). Itse tarkoitin
MaxDayPerMonth(Month1 to Month12)
muistiksi että kuinka monta päivää on jokaisessa kuukaudessa ja näiden päivien maksimi määritin Month1-12 muuttujiin, mutta unohdin miten olin ajatellut käyttää tätä MaxDayPerMonth-muuttujaa. Näytät keksineen paremman tavan järjestää tuo arrayCalendarSaveMonth (muuttujan nimi kyllä on väärä, liikaa ajateltavaa kerralla ollut).
Miten tallennan kalenterin datan ?
Tuossa petrinm:n esimerkissä pitää ilmeisesti olla For Outputin tilalla For Input, kun tiedostoa kerran luetaan. Tallennus tiedostoon hoituu sitten avaamalla tiedosto Output-moodissa.
Tässä tulee toinen esimerkki kalenterin tietojen tallennuksesta. Tiedot ovat taulukossa, jota varten on määritetty oma tietotyyppi. Jokaisella taulukon rivillä on päivämäärä ja siihen liittyvä tieto. Aliohjelma UusiTieto lisää uuden päivämäärän ja tiedon taulukkoon ja kasvattaa laskurimuuttujaa. Aliohjelma Tallennus tallentaa kalenterin tiedot binääritiedostoon, ja aliohjelma Lataus lataa tallennetut tiedot binääritiedostosta. Lisäsin formille vielä kaksi nappia, joista toinen lisää kalenteriin kolme tietoa ja tallentaa sen ja toinen lukee tiedot tiedostosta ja näyttää tämän vuoden helmikuuhun osuvat tiedot.
Option Explicit Private Type Kalenteritieto pvm As Date tieto As String End Type Dim tiedot(1000) As Kalenteritieto Dim maara As Integer Sub UusiTieto(pvm As Date, tieto As String) maara = maara + 1 tiedot(maara).pvm = pvm tiedot(maara).tieto = tieto End Sub Sub Tallennus(tiedosto As String) Dim i As Integer Open tiedosto For Binary As #1 Put #1, , maara For i = 1 To maara Put #1, , tiedot(i) Next Close #1 End Sub Sub Lataus(tiedosto As String) Dim i As Integer Open tiedosto For Binary As #1 Get #1, , maara For i = 1 To maara Get #1, , tiedot(i) Next Close #1 End Sub Private Sub Command1_Click() UusiTieto "2008-02-20", "kokous" UusiTieto "2008-12-24", "jouluaatto" UusiTieto "2008-02-27", "loma" Tallennus "c:\omat\kalenteri.dat" End Sub Private Sub Command2_Click() Dim i As Integer Lataus "c:\omat\kalenteri.dat" For i = 1 To maara If Year(tiedot(i).pvm) = Year(Now) And Month(tiedot(i).pvm) = 2 Then MsgBox tiedot(i).pvm & ": " & tiedot(i).tieto End If Next End Sub
En tunne käyttämääsi kalenterikontrollia, mutta toivottavasti tästä esimerkistä on kuitenkin apua. Jos kontrolliin itseensä pystyy tallentamaan tietoja, erillinen taulukko on kenties tarpeeton, mutta ei siitä ole koskaan haittaa.
rautamiekka kirjoitti:
Voisitko kertoa jokaisen pienenkin asian mitä tuo toinen koodi tarkalleen tekee joka kohdassa ?
Kaipaatko vielä selvennystä tuohon heksaeditorikoodiin, vaikka se ei juuri liitykään aiheeseen?
Aihe on jo aika vanha, joten et voi enää vastata siihen.