/ 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
32 bit
Fra : Thor


Dato : 13-06-04 12:53

Hejsa

Jeg har lavet et program der læser en fil som indeholder en masse X,Y data.
Jeg læser dem ind i et array hvor variablerne er dimensioneret som double.

Kan det virkelig passe at man kun kan indlæse 17500 sæt X,Y'er ?? Skulle et
32 bit program som VB6 ikke kunne håndtere flere millioner sæt ??



 
 
Tomas Christiansen (13-06-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 13-06-04 21:24

Thor skrev:
> Kan det virkelig passe at man kun kan indlæse 17500 sæt X,Y'er ?? Skulle
et
> 32 bit program som VB6 ikke kunne håndtere flere millioner sæt ??

Hvordan viser fejlen sig?

Du kan sagtens oprette tabeller med _MANGE_ flere "doubles" i, så det er
ikke dér begrænsningen ligger.

-------
Tomas


Thor (14-06-2004)
Kommentar
Fra : Thor


Dato : 14-06-04 07:24


> Hvordan viser fejlen sig?

Den stopper bare ved 17500. Hvis jeg kun indlæser X'er kan den tage dobbelt
så mange. Der er ingen fejlmeddelser.
Jeg holder styr på hvor mange sæt den indlæser ved at skrive Ubound i en
text box.

Excel har iøvrigt en begrænsning på 65000 linier.

> Du kan sagtens oprette tabeller med _MANGE_ flere "doubles" i, så det er
> ikke dér begrænsningen ligger.

Jeg kan prøve at sende en del af koden,,,i aften når jeg kommer hjem.



Tomas Christiansen (14-06-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 14-06-04 08:10

Thor skrev:
> Excel har iøvrigt en begrænsning på 65000 linier.

Jo, og jeg kan sikkert også fortællle dig om begrænsninger i COBOL, Pascal,
Ami PRO og EDT, men det har ikke den store relevans for Microsoft Visual
Basic.

Bruger du VBA (VB script-indlejret i f.eks. Office-pakken), VBScript, ASP
eller lignende eller er det Visual Basic .../5/6?

-------
Tomas


Harald Staff (14-06-2004)
Kommentar
Fra : Harald Staff


Dato : 14-06-04 16:28

"Thor" <t@id.com> skrev i melding
news:40cd4545$0$223$edfadb0f@dread16.news.tele.dk...
>
> > Hvordan viser fejlen sig?
>
> Den stopper bare ved 17500. Hvis jeg kun indlæser X'er kan den tage
dobbelt
> så mange. Der er ingen fejlmeddelser.

Det er dessverre normal, muligens udokumentert, VB-oppførsel idet man støter
på Chr(0) i en variabel eller verdi. Så måske er det årsaken.

HTH. Beste hilsen Harald



preben nielsen (14-06-2004)
Kommentar
Fra : preben nielsen


Dato : 14-06-04 09:05


"Thor" <t@id.com> skrev i en meddelelse
news:40cc4028$0$167$edfadb0f@dread11.news.tele.dk...

> Kan det virkelig passe at man kun kan indlæse 17500 sæt X,Y'er
?? Skulle et

Nej.

Har du kigget om der er noget specielt i sæt 17501 ?


--
/\ preben nielsen
\/\ prel@post.tele.dk



Thor (14-06-2004)
Kommentar
Fra : Thor


Dato : 14-06-04 19:39


> Har du kigget om der er noget specielt i sæt 17501 ?

Der er intet galt med dette data sæt. Jeg synes også at det er lidt
påfaldende, at det lige præcis er 17500,,,det ligner jo ikke en
tilfældighed. Og når jeg kun indlæser X'erne kan den tage det dobbelte.

Jeg har vedhæftet den del af mit program der læser X,Y erne op i
hukommelsen. Først læser rutinen antal koordinatsæt og herefter dimensionere
den et array og læser data op i det.

**
Private Sub mnuInputFile_Click()

XY = 0

CmdOpen.Filename = "*.txt" 'vælger fil der skal behandles
CmdOpen.Filter = "text files|*.txt|All files|*.*"
CmdOpen.ShowOpen

Filename = CmdOpen.Filename
If Len(Filename) > 0 Then
Screen.MousePointer = vbHourglass
Label2.Caption = Filename

XYfile = FreeFile 'Læser filens længde
Open Filename For Input As #XYfile
Do Until EOF(XYfile)
Input #XYfile, Xcoord, Ycoord
XY = XY + 1
Loop

Seek #XYfile, 1 'læser filen op i et array
ReDim Counter(XY - 1, 1)
For z = 0 To XY - 1
Input #XYfile, Counter(z, 0), Counter(z, 1)

Next z
Close XYfile
End If

Label4.Caption = UBound(Counter) + 1 ' antal X,Y der læst ind i hukommelsen

For q = 0 To UBound(Counter)
If q > UBound(Counter) Then
q = UBound(Counter)
End If
Call TotalLength 'beregner afstanden mellem punkterne til en samlet afstand
Next q

Label5.Caption = Format(TotalL, "#.00" & " m")

Screen.MousePointer = vbDefault

End Sub

**



Thor (14-06-2004)
Kommentar
Fra : Thor


Dato : 14-06-04 20:06

problem løst !!!!!

problemet var alligevel den tekst-fil jeg læser ind. Jeg ændrede den fra at
være semikolonsepareret til kommasepareret og så virkede det.



Tomas Christiansen (14-06-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 14-06-04 22:37

Thor skrev:
> problem løst !!!!!

Det var da glædeligt. Forstod du selv hvorfor?

> problemet var alligevel den tekst-fil jeg læser ind. Jeg ændrede den fra
at
> være semikolonsepareret til kommasepareret og så virkede det.

Ja, fordi Input# statementet forventer at data bliver separeret med kommaer,
og der forventes anførselstegn om strenge.
Da du separerede med semikolon, blev kun første tal fra hver linie i din
input-fil læst. Resten af linien blev forsøgt indlæst med ignoreret.
Mon ikke din fil har 17500 linier i sig? (Det er ret let at checke med
f.eks. Notepad - prøv med goto linie 0)

Jeg vil lige komme med et par kommentarer til din kode:

Det ser som om at du ikke bruger Option Explicit (det bør man _altid_ gøre)
og at du ikke altid erklærer dine variabler.
Derfor kan det være svært at forudse hvad denne linie rent faktisk vil
indlæse:
> Input #XYfile, Xcoord, Ycoord
(Husk på at ikke-erklærede variabler er af typen Variant)

Hvad skal If-sætningen gøre godt for her???
> For q = 0 To UBound(Counter)
> If q > UBound(Counter) Then
> q = UBound(Counter)
> End If
> Call TotalLength 'beregner afstanden mellem punkterne til en samlet
afstand
> Next q

-------
Tomas


Thor (15-06-2004)
Kommentar
Fra : Thor


Dato : 15-06-04 07:24

> Ja, fordi Input# statementet forventer at data bliver separeret med
kommaer,
> og der forventes anførselstegn om strenge.
> Da du separerede med semikolon, blev kun første tal fra hver linie i din
> input-fil læst. Resten af linien blev forsøgt indlæst med ignoreret.
> Mon ikke din fil har 17500 linier i sig? (Det er ret let at checke med
> f.eks. Notepad - prøv med goto linie 0)

Nej. De første 17500 linier blev læst korrekt. Den textfil jeg har brugt til
at teste mit program har 35000 linier. Efter jeg lavede filen om til at være
kommasepareret lavede jeg nogle tests og det indtil videre lykkes at læse en
fil med over 200000 linier ind.

>
> Jeg vil lige komme med et par kommentarer til din kode:
>
> Det ser som om at du ikke bruger Option Explicit (det bør man _altid_
gøre)
> og at du ikke altid erklærer dine variabler.
> Derfor kan det være svært at forudse hvad denne linie rent faktisk vil
> indlæse:
> > Input #XYfile, Xcoord, Ycoord
> (Husk på at ikke-erklærede variabler er af typen Variant)
>
> Hvad skal If-sætningen gøre godt for her???
> > For q = 0 To UBound(Counter)
> > If q > UBound(Counter) Then
> > q = UBound(Counter)
> > End If
> > Call TotalLength 'beregner afstanden mellem punkterne til en samlet
> afstand
> > Next q


Tak for kritikken



Tomas Christiansen (15-06-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 15-06-04 21:27

Thor skrev:
> > Da du separerede med semikolon, blev kun første tal fra hver linie i din
> > input-fil læst. Resten af linien blev forsøgt indlæst med ignoreret.
....
> Nej. De første 17500 linier blev læst korrekt. Den textfil jeg har brugt
til
> at teste mit program har 35000 linier.

....og du finder det ikke påfaldende at når du læser en fil med 35000 linier,
og du er i stand til at læse 17500 sæt af koordinater, hvor hver sæt består
af 2 koordinater (hint: 2 gange 17500 er lig 35000)? Med andre ord: De
første 17500 linier blev ikke læst korrekt!

(Jeg _skulle_ naturligvis oprindelig have foreslået at din fil bestod af
35000 linier og ikke 17500 - min fejl.)

-------
Tomas


Thor (16-06-2004)
Kommentar
Fra : Thor


Dato : 16-06-04 07:28


> ...og du finder det ikke påfaldende at når du læser en fil med 35000
linier,
> og du er i stand til at læse 17500 sæt af koordinater, hvor hver sæt
består
> af 2 koordinater (hint: 2 gange 17500 er lig 35000)? Med andre ord: De
> første 17500 linier blev ikke læst korrekt!


Jeg ved ikke om vi taler forbi hinanden? Når jeg siger at de første 17500
linier blev læst korrekt, så mener jeg at de første 17500 X'er og Y'er blev
læst ind. Der er såvidt ingen forskel på de første 17500 linier, fra før til
efter jeg ændrede separeringen til komma.

Ja, jeg er klar over at 2*17500=35000. Det var det jeg selv påpegede.



Tomas Christiansen (16-06-2004)
Kommentar
Fra : Tomas Christiansen


Dato : 16-06-04 21:38

Thor skrev:
> Jeg ved ikke om vi taler forbi hinanden? Når jeg siger at de første 17500
> linier blev læst korrekt, så mener jeg at de første 17500 X'er og Y'er
blev
> læst ind. Der er såvidt ingen forskel på de første 17500 linier, fra før
til
> efter jeg ændrede separeringen til komma.

Hvis min antagelse om, at du har to værdier i hver linie i inputfilen er
korrekt, gælder følgende:
Når du oprindelig skriver at dit program stopper indlæsningen efter 17500
sæt koordinater (vi har så senere erfaret at din fil består af 35000
linier), så er det _fordi_ dit program, hvis du bruger semikolon som
separator, og semikolonnet ikke er efterfulgt af et (eller flere mellemrum),
kun læser den første værdi som forekommer i hver linie i inputfilen. De
først 17500 linier bliver altså _ikke_ indlæst korrekt. Kun den _første_
værdi på hver linie bliver læst. Når alle 35000 linier er læst (som burde
svare til 35000 sæt koordinater), er der i virkeligheden kun læst 17500 sæt
koordinater (fordi halvdelen af koordinaterne, eller mere præcist: hver
anden koordinat, er blevet ignoreret).

Hvis du bruger komma som separator, vil det (som du selv har erfaret) virke
efter hensigten.

Håber det var klart og forståelig

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste