Avatar billede weiland Nybegynder
02. august 2004 - 23:45 Der er 5 kommentarer og
1 løsning

Placering af dim ved rekursiv function

Nedenstående rekursive funktion kalder en sub-routine. Fejlen i browseren er "Invalid procedure call or argument: 'Mid'"
Min fejltestning har i det mindste afsløret, at det har noget at gøre med dim'erne. Men uanset hvor jeg placerer dem, vil det ikke lykkes :-(

Dim Open, OpenEnd, OpenID, arrPageID, arrParentID, arrTitle, arrPublic

Open = "23-1-"

Sub FirstOpen
    Open = replace(Open,"#-","")
    OpenEnd = Instr(Open,"-")
    OpenID = Mid(Open,1,OpenEnd-1)
End Sub

'arrays med data
arrPageID = Split(arrPageID,"#")
arrParentID = Split(arrParentID,"#")
arrTitle = Split(arrTitle,"#")
arrPublic = Split(arrPublic,"#")

'Funktion som undersøger for undersider
Function Sider(intID)
   
  For m = 1 to Ubound(arrPageID)
 
  ' Hvis underside til den side som funktionen er kaldt med
  If Cint(arrParentID(m)) = Cint(intID) Then
   
        if Open <> "" then
                Call FirstOpen
           
                if OpenID = arrPageID(m) then
                    Sider = Sider & "<img src=""minus.gif"">"
                else
                    Sider = Sider & "<img src=""plus.gif"">"
                end if
           
            Open = replace(Open,""& OpenID &"","#")
        else
       
            Sider = Sider & "<img src=""plus.gif"">"
        end if
    end if
       
    Sider = Sider & ""& arrTitle(m) &""
   
    Sider = Sider & Sider(arrPageID(m))
   
  End If       
Next
End Function

'Kald funktionen med alle niveau0-sider
Response.Write Sider(0)
Avatar billede eagleeye Praktikant
03. august 2004 - 00:01 #1
Fejlken kommer fordi en af parameterne i mid bliver mindre eller lig 0.

Umiddelbart gør du en fejl her hvor du fjerne ID'et du kan let komme til at fjerne meget mere end du tror:

Open = replace(Open,""& OpenID &"","#")


Hvis Open er lig "2-23-3-"
Så fjerner du ID=2 så vil open se sådan her ud "#-#3-3-".
Det man typisk vil gøre er at sikre at man har skille tegn før og efter tallet. Open skulle se sådan her ud: "-2-23-3-"
Så replacer man "-ID-" , med "-"
Samme eks man har Open="-2-23-3-" og replcer "-2-" med "-" så ser open sådan her ud: "-23-3-" altså 2 er fjerne og der er stadig start og slut tegn imelem ID'erne. Så prøv at rette den replace linje til:

Open = replace(Open,"-"& OpenID &"-","-")


og lav det sådan Open ser sådan her ud:
Open = "-23-1-"



Der ud over kan du lave funktion FirstOpen lidt om sådan den ikke kan fejle med en if sætning:

Sub FirstOpen
    Open = replace(Open,"--","")
    OpenEnd = Instr(Open,"-")
    if OpenEnd>0 then
      OpenID = Mid(Open,1,OpenEnd-1)
    else
      OpenID = "fejl"
    end if
End Sub



Så skal denne if sætning laves lidt om:
if Open <> "" then

For nu kan Open være tom ved der er en bindestreg i den:
if Open <> "" and Open <> "-" then
Avatar billede eagleeye Praktikant
03. august 2004 - 00:06 #2
Det heller ikke helt godt.... For den vil stadig fejle med mid.

Lad open se sådan her ud endnu:

Open = "23-1-"

Den før nævnte replace linje laver du sådan her:

Open = replace("-"&Open,"-"& OpenID &"-","#-")

Og laver FirstOpen om til denne:
Sub FirstOpen
    Open = replace(Open,"#-","")
    OpenEnd = Instr(Open,"-")
    if OpenEnd>0 then
      OpenID = Mid(Open,1,OpenEnd-1)
    else
      OpenID = "fejl"
    end if
End Sub
Avatar billede weiland Nybegynder
03. august 2004 - 00:15 #3
Tak for hjælpen! Jeg har prøvet at gennemgøre ændringerne.. siden melder ikke længere fejl, men gør ikke det forventede (med plus/minus.gif)
Jeg tænker ikke helt klart længere pga tidspunktet, så det er vist bedre at jeg tester nærmere i morgen :-)
Jeg vender tilbage!
Avatar billede eagleeye Praktikant
03. august 2004 - 00:17 #4
Har du prøvet det sidste jeg skrev?
Hvis ikke så prøv det i morgen :)
Avatar billede weiland Nybegynder
03. august 2004 - 09:47 #5
Jamen dog.... utroligt hvad 8 timers søvn kan gøre :-)
Jeg havde lavet en slåfejl, da jeg gennemførte dine ændringer. De virkede jo!

Tusind tak! Vil du lige svare?
Avatar billede eagleeye Praktikant
04. august 2004 - 12:24 #6
Ok ;) Det vil jeg da.
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