10. oktober 2006 - 15:04Der er
4 kommentarer og 1 løsning
Skrivning til Binær fil
Jeg sidder med et program der i hver linie i en binær fillæser en række variable og skriver dem til en ny efter de er korrigeret.
Det fungerer sådan set fint, men skrivningen til den nye fil kører langsomt, og det er efterhånden blevet en gene.
jeg skriver på nuværende tidspunkt de omtalte variable til den nye binære fil på følgende måde.
Dim XKorLokal As Long Dim YKorLokal As Long Dim ZKorLokal As Long Dim RelYKorLokal As Integer Dim KortTextLokal As String * 12
Put #FileID, , XKorLokal Put #FileID, , YKorLokal Put #FileID, , ZKorLokal Put #FileID, , RelYKorLokal Put #FileID, , KortTextLokal, osv
Der er ca 20 variable i hver linie, og jeg ville gerne kunne skrive dem på én gang, sådan at programmet ikke skal have fat i den nye fil så mange gange og skrive ned i den.
Jeg har et tilsvarende program der arbejder med Ascii filer, og der samler jeg bare variablerne til en lang streng og skriver en hel linie af gangen.
Kan noget tilsvarende lade sig gøre for binære data??
(OBS: Nedenstående er lavet i Excel-VBA, så det kan måske være nødvendigt med justeringer til VB)
'Lav et modul, copy'n'paste koden ind:
Option Explicit
'Data bliver gemt i en "Record" af denne type: Type tKortData XKorLokal As Long YKorLokal As Long ZKorLokal As Long RelYKorLokal As Integer KortTextLokal As String * 12 End Type
Dim KortData As tKortData
Sub WriteRecord() Dim lFileNumber As Long Dim bCounter As Byte Const FilNavn As String = "C:\Temp\KortData.Bin" ' Ret sti & navn til :-)
'Åben binær-filen for skrivning. Lås for andre. Open FilNavn For Binary Access Write Lock Write As lFileNumber
'Hæld lidt testdata ind: For bCounter = 0 To 254 With KortData .XKorLokal = 1000 .YKorLokal = 2000 .ZKorLokal = 3000 .RelYKorLokal = bCounter .KortTextLokal = "Lokal12" End With
'Skriv Record i filen Put #lFileNumber, , KortData Next bCounter 'Luk filen Close lFileNumber
'Rens Record. Evt. fejl giver så en forkert værdi ved genindlæsning. With KortData .XKorLokal = 0 .YKorLokal = 0 .ZKorLokal = 0 .RelYKorLokal = 0 .KortTextLokal = "" End With
Det virkede perfekt, og det sparer en del tid - så smid et svar.
Der er temmeligt meget data i nogle af de filer jeg bearbejder, og programmet har jo stadig den nye fil åben til skrivning en gang på linie. Ville det kunne spare yderligere tid at skrive alle linierne i et array, og så skrive filen en gang for alle til sidst??
Tak for respons, jeg er glad for at det kunne hjælpe dig :-)
Tidsbesparelse: ja, du vil kunne hente lidt tid, men da OS'et cacher data fra/til hd'ere tror jeg ikke at du vinder timer :-). "Temmeligt meget data" er et lidt abstrakt begreb :-), for hvis du har så meget data at dit programmet skal bruge virtuel hukommelse (hd-plads) så ryger besparelsen lidt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.