/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Fejl ved læsning af kæmpe-fil ?
Fra : Jens Jensen


Dato : 03-01-01 15:38

Jeg skal behandle en binær fil (EBCDIC) på 3 GB.
Jeg har lavet et program i VB 6.0, som læser 194 bytes ad gangen (en
record).
Filen indeholder 16 millioner records, men VB stopper med en run-time error
63 efter 11 millioner records.
Er der nogen der kender til en sådan begrænsning? Eller kender i et
program,
der kan splitte en binær fil på 3GB i mindre filer (uden pakning).

Med venlig hilsen
Michael Plet




 
 
Tomas Christiansen (03-01-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 03-01-01 21:35

Jens Jensen skrev:
> Jeg skal behandle en binær fil (EBCDIC) på 3 GB.

Det er ret beset jo netop IKKE en binær fil, men en tekst-fil, kodet i
EBCDIC

> Jeg har lavet et program i VB 6.0, som læser 194 bytes ad gangen (en
> record).
> Filen indeholder 16 millioner records, men VB stopper med en run-time
error
> 63 efter 11 millioner records.

Mit gæt er, at dit program fejler, når det forsøger at læse post nummer
11069504. Netop som der forsøges læst mere end 2147483647 bytes (svarende
til den højste værdi en Long kan indeholde).

Er det korrekt?

Lad mig se hvordan du åbner filen (dvs. din Open statement), hvordan du
læser fra filen (Get eller ?) og hvordan de, i de to statements implicerede
variabler, er erklæret.

MÅSKE er der alligevel håb.

-------
Tomas



Tomas Christiansen (03-01-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 03-01-01 22:57

Tomas Christiansen skrev:
> MÅSKE er der alligevel håb.

Jeg satte mig for at genskabe problemet, og derefter løse det.

Mit gæt er, at du bruger noget i retning af:

Dim bData(1 To 194) As Byte
Open sFilnavn For Binary As #hFil
Get #hFil, , bData

til at åbne og læse filen med. Prøv i stedet med:

Dim bData(1 To 194) As Byte
Open sFilnavn For Random As #hFil Len = 194
Get #hFil, , bData

(læg mærke til 'Binary' -> 'Random' og 'Len = 194')

Nu skulle du være i stand til at læse filer, som er 2.147.483.647 * 194 =
416.611.827.518 bytes store.
Hvis ikke det skulle være nok, kan du erstatte tallet i 'Len = 194' med et
multiplum af 194 (f.eks. 32592) og derved kunne læse filer op til
69.990.787.023.024 bytes (hvis ikke der kommer en begrænsning et andet
sted... )

-------
Tomas



N/A (05-01-2001)
Kommentar
Fra : N/A


Dato : 05-01-01 08:25



Tomas Christiansen (05-01-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 05-01-01 08:25

Michael Plet skrev:
> Når jeg læser Random med rec-len 194 stopper programmet ved rec
15.770.000.

Jeg testede det ved at skrive og læse 17.000.000 poster - uden problemer.

Jeg har SP4 på min VB 6.0 og bruger Windows 2000.

Det går iøvrigt en del hurtigere at læse filen end jeg umiddelbart skulle
forvente.

-------
Tomas



Tomas Christiansen (06-01-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 06-01-01 00:39

Michael Plet skrev:
> Når jeg læser Random med rec-len 194 stopper programmet ved rec
15.770.000.

Jeg har lige prøvet igen, med nedenstående kode, at skrive og læse
20.000.000 poster (filen bliver på 3.880.000.000 bytes) uden problemer.

Private Const BLOKSIZE As Long = 194
Private Const MAXBLOK As Long = 20000000
Private gsFilnavn As String

Private Sub Form_Load()
gsFilnavn = "C:\Stor.Fil"
End Sub

Private Sub cmdSkrivRandom_Click()
Dim hFil As Integer
Dim lBlokNr As Long
Dim bData(1 To BLOKSIZE) As Byte
hFil = FreeFile
Open gsFilnavn For Random As #hFil Len = BLOKSIZE
For lBlokNr = 1 To MAXBLOK
Put #hFil, , bData
Next
Close #hFil
End Sub

Private Sub cmdLæsRandom_Click()
Dim hFil As Integer
Dim bData(1 To BLOKSIZE) As Byte
hFil = FreeFile
Open gsFilnavn For Random As #hFil Len = BLOKSIZE
Do Until EOF(hFil)
Get #hFil, , bData
Loop
Close #hFil
End Sub

-------
Tomas



Bjørn Jeberg (07-01-2001)
Kommentar
Fra : Bjørn Jeberg


Dato : 07-01-01 18:08

Tomas Christiansen <toc@blikroer.removethis.dk> wrote in message
news:OVs56.464$pO1.14909@news.get2net.dk...
>
> Jeg har lige prøvet igen, med nedenstående kode, at skrive og læse
> 20.000.000 poster (filen bliver på 3.880.000.000 bytes) uden problemer.
>

Prøv med 23.000.000.

Jeg havde jo en teori om at max. størrelsen nok var makisimum værdien for en
Long (2.147.483.647), men det holder ikke kan jeg godt se.

Nu har jeg også eksperimenteret lidt og det ser ud til at maksimum
størrelsen for en fil svarer til størrelsen på en Long (32 bit), altså
4.294.967.296.

Til mit eget spørgsmål om hvad LOF returnerer på en fil større end
2.147.483.647, ja der er svaret altså at den returnerer et negativt tal. Men
det holder altså kun op til 4.294.967.296 hvor der ikke er flere bits til
rådighed.

Bjørn



Tomas Christiansen (07-01-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 07-01-01 21:42

Bjørn Jeberg skrev:
> Prøv med 23.000.000.

Jeg havde ikke mere plads på min disk...

> Nu har jeg også eksperimenteret lidt og det ser ud til at maksimum
> størrelsen for en fil svarer til størrelsen på en Long (32 bit), altså
> 4.294.967.296.

Tak for oplysningen!

-------
Tomas



Bjørn Jeberg (03-01-2001)
Kommentar
Fra : Bjørn Jeberg


Dato : 03-01-01 21:29

Jens Jensen <nogen@microsoft.com> wrote in message
news:92vd6q$apn$1@news.inet.tele.dk...
> Jeg skal behandle en binær fil (EBCDIC) på 3 GB.
> Jeg har lavet et program i VB 6.0, som læser 194 bytes ad gangen (en
> record).
> Filen indeholder 16 millioner records, men VB stopper med en run-time
error
> 63 efter 11 millioner records.
> Er der nogen der kender til en sådan begrænsning? Eller kender i et
> program,
> der kan splitte en binær fil på 3GB i mindre filer (uden pakning).
>

Jeg mener at maksimum størrelsen på en fil svarer til maksimum værdien for
en Long, nemlig 2,147,483,647. Det passer også meget godt med at hvis du
dividerer dette med 194, så ender du på lidt over 11 millioner. Har desværre
ikke lige en løsning på problemet.
--
Bjørn Jeberg
LabSoft@vip.cybercity.dk




Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste