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
NextMutta 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 SubLuulen 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 SubEn 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.