Avatar billede mega-hawk Nybegynder
20. juli 2009 - 19:18 Der er 2 kommentarer og
1 løsning

Forklaring af for - next

Hej.

Jeg er som sagt helt ny til VB og har lånt bogen "start på visual basic 6"

Som sådan forstår jeg en hel del af det, men kapitlet om for - next. Har læst det igennem 5 gange nu og jeg forstår det stadig ikke.

Dim PersonNavn(10)
Dim NavnId as integer

Private sub command1_click()
For NavnID = 1 to 10
PersonNavn(NavnId) = inputbox("Skriv et navn")
next
end sub

og så

Private sub command2_click()
For NavnId =  1 to 10
MsgBox PersonNavn(NavnId)
next
end sub

Har fundet ud af det er en vigtig del af at lave programmer at man også forstår den kode da man åbenbart tit kommer til at bruge den.

Det jeg så gerne vil have forklaret er her:

Dim PersonNavn(10)

Kan den ikke laves så den hedder noget i stil med.
Dim PersonNavn(Det antal navne jeg taster i mit indtastningsfelt)?

Og det andet jeg heller ikke forstår.
eks
MsgBox PersonNavn(NavnId)
og
PersonNavn(NavnId) = inputbox("Skriv et navn")
Hvad er det man har først og hvad er det man skriver i sin parantes?

Jeg forstår ikke bogens eksempel og har snart stiret mig blind på det så er der nogen som kan forklare det på en let forståelig måde og med noget brugbart kode?

For en god forklaring give gode point ;o)
Avatar billede arne_v Ekspert
20. juli 2009 - 19:24 #1
MsgBox PersonNavn(NavnId)
og
PersonNavn(NavnId) = inputbox("Skriv et navn")

PersonNavn er et array (der er plads til flere vaerdier i variabelen)

NavnId angiver hvilket element (vaerdi) du vil bruge

----

Dim PersonNavn(Det antal navne jeg taster i mit indtastningsfelt)?

er nok mere tricky - jeg mener at du er noedt til at bruge ReDim for at lave det

spring over den problemstilling i foerste omgang
Avatar billede mega-hawk Nybegynder
20. juli 2009 - 19:52 #2
sorry...
Stadig ikke helt forstået.

Kan du ik lave et eksempel til mig hvor jeg har et arry og der skal alt fra det arry gemmes i en fil.
Nogen i stil med det jeg er igang med i mit program.
Jeg har en listbox. Lad os kalde den for listbox1
Så har jeg noget data i den som skal skrives til en fil.
Lad os bare kalde det for data.
Så skal jeg vel have en kode som i stil med:

dim ArryId as Integer
dim data as string

open "fil.navn" for output as #1
for Arryid(data) fra start to slut
next
end if
close #1

Og det er der jeg bliver tabt.
Hvad skal der præcis stå?
Avatar billede mrgumble Nybegynder
21. juli 2009 - 09:13 #3
Vi spoler lige tilbage og så vil jeg prøve at besvare dine første spørgsmål:

Dim PersonNavn(10)

Dim nøgleordet i VB betyder at du opretter en variabel. I VB kan du gøre det on-the-fly, men det er ikke særlig hensigtsmæssig. (For at tvinge dig til at deklarere en variabel, kan du skrive "Option Explicit" i toppen af hver modul.)
Dim PersonNavn(10) deklarerer altså en variabel. Ydermere har du i parentes 10, hvilket indikerer at det er en array der bliver oprettet med 10 indgange, nr. 1-10 (de fleste andre programmeringssprog starter med at tælle fra 0).
Prøv at se mere her: http://www.geocities.com/alpha_productions2/vb_arrays.htm

Du kan også vælge at deklarere dit array som:
Dim PersonNavn() As String

Inden du begynder at udfylde den, finder du ud af, hvor mange navne du vil bruge:
antal = 8

Og du kan tilpasse dit array:
ReDim PersonNavn(antal)


Nu har du initialiseret dit array til 8 pladser og vil gerne indsætte noget på den 4. plads:
PersonNavn(4) = "H. C. Andersen"

Dvs. "PersonNavn(4)" opfattes som "tag variablen kaldet PersonNavn og på den 4. plads...". Vil du efterfølgende vise hvad der står, skriver du:
MsgBox PersonNavn(4)


For-løkken
En For-løkke er rigtig smart, for den gentager noget kode hvor den eneste forskel er en tæller. I eksemplet:
For NavnId =  1 to 10
MsgBox PersonNavn(NavnId)
Next

Gentages "MsgBox PersonNavn(NavnId)" 10 gange, men hvor "NavnId" tælles én op for hver omgang. Det svarer altså til at du i stedet skrev:
MsgBox PersonNavn(1)
MsgBox PersonNavn(2)
MsgBox PersonNavn(3)
MsgBox PersonNavn(4)
MsgBox PersonNavn(5)
MsgBox PersonNavn(6)
MsgBox PersonNavn(7)
MsgBox PersonNavn(8)
MsgBox PersonNavn(9)
MsgBox PersonNavn(10)

For-løkken har altså den styrke, at du ikke behøver vide på forhånd hvor mange gange den skal gennemløbes. Hvis størrelsen på PersonNavn er variabelt, kan du skrive:
For NavnId =  LBound(PersonNavn) to UBound(PersonNavn)
MsgBox PersonNavn(NavnId)
Next

LBound og UBound returnerer hhv. den laveste (Lower) og øverste (Upper) tæller i arrayet.


Til dit sidste kodeeksempel er der flere fejl:

dim ArryId as Integer
dim data as string

open "fil.navn" for output as #1
for Arryid(data) fra start to slut
next
end if
close #1


"ArryId(data)" giver bare ikke mening, da ArryId er en Integer og data en streng; så kan de bare ikke sættes sammen på den måde.
Desuden har du en "End if" stående midt i det hele.

Jeg lader det stå til dig, om at skrive koden, for at gemme indholdet af dit array/listbox i en fil. Med det jeg har beskrevet, håber jeg du kan løse problemet.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester