Avatar billede mikker Nybegynder
12. februar 2004 - 15:01 Der er 9 kommentarer og
1 løsning

Goto label i VBScript

Nu spørger jeg lige dumt...

Er det slet ikek muligt at lave en ganske harmløs, lillebitte, gammeldags goto i VBScript?
Følgende _burde_ virke... Men det gør det ikke.
Jeg føler mig godt nok ikke som den svedigste navle i saunaen lige nu :o(

option explicit
dim s

s=0
a:
s=s+1
msgbox s
if s < 11 then goto a

- Mikker (snøft)
Avatar billede fileto Seniormester
12. februar 2004 - 15:06 #1
Den står ikke i min VBScript manual, så jeg vil tro Bill har afskaffet den.
Avatar billede fileto Seniormester
12. februar 2004 - 15:09 #2
Men sjovt nok står den i min VB.NET manual.
Avatar billede mikker Nybegynder
12. februar 2004 - 15:13 #3
Jeg er klar over, at den 5250 Emulator fra IBM jeg benytter, måske ikke er den nyeste, men ifølge hjælpen skulle det være muligt...

  GOTO  Gå til adresse (label).
  Format 1:  GOTO adresse1
  Format 2:  GOTO adresse2 ON ERROR
  Format 3:  GOTO adresse3 ON TIMEOUT

  Bemærkning 1: ON ERROR og ON TIMEOUT defineres af kommandoerne RUN, SEND eller RECEIVE eller af en Wait-betingelse, der står før GOTO-kommandoen.
Bemærkning 2: Hvis du bruger GOTO og LABEL til at oprette en løkke, bliver resultatet uforudsigeligt, hvis løkken udføres mange gange, dvs. mere 1.000 gange.


  LABEL  En adresse, der refereres til af en GOTO-kommando.

  Format:  :adresse
  f.eks.  GOTO adresse1


- Mikker
Avatar billede powell Nybegynder
12. februar 2004 - 15:40 #4
Goto har aldrig været til pænt brug, man hamler som oftest ud i noget spagheti kode, det er nok grunden til den er fjernet. (nogen mener også at det er tale om en religionskrig, måske derfor den er med i VB.Net)
Avatar billede mikker Nybegynder
12. februar 2004 - 15:54 #5
Løsninger venner ! Jeg skal bruge løsninger :o)
Hvad gør jeg så?

Det ser noget håbløst ud, men der må for f..... da være en anden løsning.

- Mikker
Avatar billede powell Nybegynder
12. februar 2004 - 15:57 #6
Mange:
Til dit eks:

For s=0 to 11
  msgbox s
Next

Eller

s=0
Do until s=11
  s=s+1
Loop
Avatar billede mikker Nybegynder
12. februar 2004 - 18:15 #7
Det er klart :o)
Men til en makro er det ikke særlig egnet.
Forestil dig at du har et skærmbillede du læser data fra.
Hvis så det ene felt indeholder 'S' skal du udføre handling 1 og derefter starte forfra.
Hvis feltet derimod indeholder 'P' eller 'N' skal du udføre handling 2, 3 og 4 men ikke handling 1.
Derefter trykkes 'PAGE DOWN' og skærmbilledet skifter og proceduren starter forfra.

Jeg KAN løse det ved at skifte emulator og køre det hele via SENDKEYS fra Excel, men denne løsning har ikke et tilstrækkeligt højt sikkerhedsniveau. :o(

- Mikker
Avatar billede powell Nybegynder
12. februar 2004 - 18:48 #8
Hvad med Select Case:
<script type="text/vbscript">
d=weekday(date)

select case d
  case 1
    document.write("Søndag")
  case 2
    document.write("Mandag igen!")
  case 3
    document.write("Bare Tirsdag")
  case 4
    document.write("Onsdag!")
  case 5
    document.write("Torsdag...")
  case 6
    document.write("Endelig Fredag!")
  case else
    document.write("Super lørdag!!!!")
end select
</script>


Eller

<script type="text/vbscript">
function greeting()
strBog=ucase(*BOGSTAV*)
If strBog = "S" then
        iAntal_S=iAntal_S+1
    msgbox("antal s: " & iAntal_S)
elseif strBog = "P" then
        iAntal_P=iAntal_P+1
    msgbox("antal p: " & iAntal_P)
elseif strBog = "N" then
        iAntal_N=iAntal_N+1
    msgbox("antal n: " & iAntal_N)
else
    msgbox("None!")
end if

end function
</script>

I begge tilfælde ville jeg lægge funktionerne ind der skal køres, så de blot blev kaldt, hvis et bogstav så krævede flere funktioner, så blot kalde dem efter hinanden.

Ville en genstart ikke resultere i at den hele tiden ville tælle P op?
Avatar billede mikker Nybegynder
13. februar 2004 - 05:58 #9
Jeg har selv overvejet Select Case, men den kan man jo heller ikke køre flere gange.
Der er åbenbart ikke nogen nem løsning. Jeg må se om jeg kan snyde.

Tak fordi I prøvede :o)

- Mikker
Avatar billede mikker Nybegynder
13. februar 2004 - 06:07 #10
Måske kan jeg løse det ved hjælp af nogle indviklede Do...Loop.
Det bliver bare hurtigt endnu mere uoverskueligt end med Goto...

- Mikker
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