Avatar billede tiger_webdesign Nybegynder
01. september 2003 - 00:03 Der er 17 kommentarer og
1 løsning

For-løkke med bogstaver

Er det muligt at lave en For-løkke med bogstaver i stedet for tal?

Med tal:
For I = 1 to 5
    MsgBox(I)
Next I

Vil lave 5 pop-up-boxe med tallene 1 til 5


Med tal:
For I = "a" to "e"
    MsgBox(I)
Next I

Vil lave 5 pop-up-boxe med bogstaverne a til e

Denne kode virker dog ikke... men ideen skulle være rimelig klar...
Avatar billede Slettet bruger
01. september 2003 - 00:04 #1
Nu har jeg ikke forstand på visual basic.
Men læg bogstaverne over i et array. Og brug dem herfra.
Avatar billede squashguy Nybegynder
01. september 2003 - 00:13 #2
eller kan du gøre det sådan:

For i = asc("a") to asc("e")
    MsgBox(chr(i))
Next
Avatar billede tiger_webdesign Nybegynder
01. september 2003 - 00:16 #3
hmmm... hvad nu hvis jeg vil:
For I = "a" to "ga"
    MsgBox(I)
Next I
Avatar billede squashguy Nybegynder
01. september 2003 - 00:19 #4
For i = asc("a") to asc("e")
    MsgBox(chr(i))
Next i

gør lige nøjagtigt det du vil... den smidder msgboxe op med bogstaverne a-e
Avatar billede tiger_webdesign Nybegynder
01. september 2003 - 00:21 #5
I know... men hvis jeg vil "tælle" efter et 26-tals system?? Beklager min første beskrivelse... skulle være som #3 af 01/09-2003 00:16:20
Avatar billede tubber Juniormester
01. september 2003 - 00:24 #6
Et forslag kunne være at bruge ascii værdierne.....
Jeg vil lige sige jeg ved ikke om de er i røven på hinanden eller om man skal ligge til hver gang med forskellige tal.....

et andet forslag kunne være en if eller case....

det kunne være noget lignende det her:

For I = 1 to 5
If I = 1 then MsgBox "a"
If I = 2 then MsgBox "b"
If I = 3 then MsgBox "c"
If I = 4 then MsgBox "d"
If I = 5 then MsgBox "e"
Next I

eller:

For I = 1 to 5
If I = 1 Then
MsgBox "a"
ElseIf I = 2 Then
MsgBox "b"
ElseIf I = 3 Then
MsgBox "c"
ElseIf I = 4 Then
MsgBox "d"
ElseIf I = 5 Then
MsgBox "e"
End If
Next I

Det jeg tænkte på med ascii værdien er den kan printes ud som bogstav.....
eks. a har ascii 47 og b 48 osv. vil det se sådan her ud ca.

For I = 47 to 51
MsbBox chr$( & I & )
Next I

(måske er det sådan her med den chr$ : MsbBox chr$(I) )

Jeg vil lige sige at jeg ikke har testet noget af det, da jeg ikke har vb installeret pt.

/Tubber
Avatar billede tiger_webdesign Nybegynder
01. september 2003 - 00:33 #7
OK... omformulering...
Jeg vil gerne tælle efter et 24-tals-system:
dvs.:
a=1
b=2
c=3
d=4
...
z=24
aa=(1*24^1+1)=25
ab=(1*24^1+2)=26
bae=(2*24^2+1*24^1+5)=(576+24+5)=605

MEN... jeg vil give den tallet og programmet skal returnere bogstaverne
Avatar billede squashguy Nybegynder
01. september 2003 - 00:33 #8
havde lige overset ga i #3

jeg tror ikke du får en for-løkke til at gøre det du vil.

hvordan skulle den f.eks. vide hvad start-og slutbogstav er?
Avatar billede doc404 Novice
01. september 2003 - 00:45 #9
Dette burde virker...

Value er dit tal du ønsker konverteret og digits er antallet af 'pladser' i dit resultatl. Har selv brugt den til at base 36 system.

  function DecToBase36(value,digits)
  dim i,a,n,x,r
    n = value
    a = array(7962624,331776,13824,576,24,1)
    r = ""
    for i = 0 to UBound(a)
      if a(i) <= n then
        x = Fix(n / a(i))
        n = n - x * a(i)
      else
        x = 0
      end if
      if x <= 9 then
        r= r+ Chr(x+48)
      else
        r= r+ Chr(x+87)
      end if
    next
    DecToBase36 = Right(r,digits)
  end function
Avatar billede doc404 Novice
01. september 2003 - 00:48 #10
Og skal du fra bae til 605.. så


  function Base24ToDec(value)
    dim i,c,r,n
    r = 0
    for i = 1 to Len(value)
      c = UCase(Mid(value,i,1))
      if c >= "0" and c <= "9" then
        n = ASC(c)-48
      elseif c >= "A" and c <= "Z" then
        n = ASC(c)-55
      else
        Base24ToDec = -1
        exit for
      end if
      r = r * 24 + n
    next
    Base24ToDec = r
  end function
Avatar billede tiger_webdesign Nybegynder
01. september 2003 - 00:55 #11
MsgBox (Base24ToDec("bae")) giver 6590
og
MsgBox (DecToBase24(604, 6)) giver ingenting...
Avatar billede doc404 Novice
01. september 2003 - 01:14 #12
Ups... dette system tæller 012345678ABCD... etc... BRB
Avatar billede doc404 Novice
01. september 2003 - 01:43 #13
Jamen vent lige lidt...
Det er vel ikke helt i orden det du vil...

Du mangler en nul værdi, ellers går det aldrig godt

A = 0, B = 1, Y = 24.. Altså et base 25 talsystem
Avatar billede doc404 Novice
01. september 2003 - 01:47 #14
Så de 605 bliver f.eks. ayf

0*25^3 + 24 * 25^1 + 5 * 25^0 = 605
Avatar billede doc404 Novice
01. september 2003 - 01:50 #15
0*25^2 + 24 * 25^1 + 5 * 25^0 = 605

Så her er de rettede funktioner

function DecToBase25(value,digits)
  dim i,a,n,x,r
    n = value
    a = array(9765625,390625,15625,625,25,1)
    r = ""
    for i = 0 to UBound(a)
      if a(i) <= n then
        x = Fix(n / a(i))
        n = n - x * a(i)
      else
        x = 0
      end if
      r = r & Chr(x + 97)
    next
    DecToBase25 = Right(r,digits)
end function
 
function Base25ToDec(value)
    dim i,c,r,n
    r = 0
    for i = 1 to Len(value)
      c = LCase(Mid(value,i,1))
      if c >= "a" and c <= "y" then
        n = ASC(c)-97
      else
        Base25ToDec = -1
        exit for
      end if
      r = r * 25 + n
    next
    Base25ToDec = r
end function
Avatar billede danauktion Nybegynder
01. september 2003 - 08:22 #16
Og når vi så vender tilbage til det der blev spurgt om, så er squashguy's kommentar svaret på dit spørgsmål, idet han udnytter det faktum at ascii-værdierne for bogstaverne a-z ligger lige efter hinanden:

Dim i As Integer
For i = Asc("a") To Asc("e")
    MsgBox (Chr(i))
Next

eller med kapitæler:
Dim i As Integer
For i = Asc("A") To Asc("E")
    MsgBox (Chr(i))
Next
Avatar billede doc404 Novice
01. september 2003 - 08:37 #17
danauktion >> spm blev omformuleret...
Avatar billede nmh Nybegynder
01. september 2003 - 09:55 #18
Brug squashguy's forslag. Det svarer mest til det, du ønsker, og det kan IKKE lade sig gøre at skrive for i="a" to "fg"
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