Avatar billede Slettet bruger
24. juni 2002 - 23:58 Der er 11 kommentarer og
1 løsning

Rekursive funktioner i ASP?

Hvordan kan det være at dette giver fejl:

Function udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

laengde = Left(arr_serial(i+1), Len(arr_serial(i+1)) - 3)

If laengde = arr_serial(i) OR laengde = "" Then

min_var = "['" & arr_overskrift(i) & "', 'midte.asp?serial=" & arr_serial(i) & "', null]" & vbCrLf
response.write min_var & " " & "]"

udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

Else

min_var = "['" & arr_overskrift(i) & "', 'midte.asp?serial=" & arr_serial(i) & "', null]" & vbCrLf
response.write min_var & " " & i

i = i - 1

udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

End If

End Function

når jeg kalder den med

udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

får jeg fejlen:

Der kan ikke bruges parenteser ved kald af en Sub
/eshop/test.asp, line 30, column 57
udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

Limie 30 er den lige før Else. Kan man ikke kalde en funktion med et array?
Avatar billede minijensen1 Nybegynder
25. juni 2002 - 00:09 #1
prøv blot at kalde din funktion for:
Function udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)
det mener jeg at jeg har gjort, og den tager pænt imod at array ..
Avatar billede Slettet bruger
25. juni 2002 - 00:12 #2
Det er vel også det jeg har gjort (se øverste linie)
Avatar billede medions Nybegynder
25. juni 2002 - 00:14 #3
Function udskriv_menu(arr_id, arr_serial, arr_overskrift, i)

laengde = Left(arr_serial(i+1), Len(arr_serial(i+1)) - 3)

If laengde = arr_serial(i) OR laengde = "" Then

min_var = "['" & arr_overskrift(i) & "', 'midte.asp?serial=" & arr_serial(i) & "', null]" & vbCrLf
response.write min_var & " " & "]"

udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

Else

min_var = "['" & arr_overskrift(i) & "', 'midte.asp?serial=" & arr_serial(i) & "', null]" & vbCrLf
response.write min_var & " " & i

i = i - 1

udskriv_menu(arr_id(), arr_serial(), arr_overskrift(), i)

End If

End Function
//>Rune
Avatar billede minijensen1 Nybegynder
25. juni 2002 - 00:15 #4
*DOH* .. sorry, jeg mente:
Function udskriv_menu(arr_id, arr_serial, arr_overskrift, i)

altså uden parentes ;-)
Avatar billede Slettet bruger
25. juni 2002 - 00:16 #5
Stadig :

"Der kan ikke bruges parenteser ved kald af en Sub" og samme sted.
Avatar billede minijensen1 Nybegynder
25. juni 2002 - 00:20 #6
kald den med

Call udskriv_menu(arr_id, arr_serial, arr_overskrift, i)
Avatar billede medions Nybegynder
25. juni 2002 - 00:21 #7
Kald funktionen udskriv_menu med denne:
udskriv_menu arr_id, arr_serial, arr_overskrift, i

//>Rune
Avatar billede Slettet bruger
25. juni 2002 - 00:30 #8
minijensen1> Nu nærmer vi os. Nu kan den da skrive ud.
Avatar billede tmceu Praktikant
25. juni 2002 - 00:41 #9
Det er ligegyldigt om du angiver dine parametre med eller uden paranteser, funktionen vil stadig kunne identificere dem som arrays.

Problemet er udelukkende dit kald af funktionen. Hvis der er mere end én parameter, kan du kun kalde den med paranteser omkring funktionen, ved at anvende call. Nedenstående kald vil begge virke:

Call udskriv_menu(arr_id, arr_serial, arr_overskrift, i)

eller

udskriv_menu arr_id, arr_serial, arr_overskrift, i
Avatar billede sn0wflake Nybegynder
25. juni 2002 - 08:48 #10
Erstat ( og ) med mellemrum, så virker den.
Avatar billede sn0wflake Nybegynder
25. juni 2002 - 08:49 #11
...ved kald af funtionen altså :) F.eks.

Response.Write fnkTest("hallo") -> Response.Write fnkTest "hallo"
Avatar billede Slettet bruger
25. juni 2002 - 11:19 #12
Og så endte det hele alligevel med at jeg fik skruet det sådan sammen at jeg kun kalder funktionen en gang. Men så har jeg da lært lidt om funktioner og hvordan de skal kaldes :)

Tak for hjælpen. Hvis nogen skulle være interesseret i min hjemmebiksede løsning kan den ses her:

<%

Function udskriv_menu(arr_id, arr_serial, arr_serial2, arr_overskrift, i, i2)

laengde_serial1 = Len(arr_serial(i))
laengde2_serial1 = laengde_serial1 - 3

laengde_serial2 = Len(arr_serial2(i2))
laengde2_serial2 = laengde_serial2 - 3

If laengde_serial1 > 0 AND laengde2_serial1 > 0 Then
rest_serial1 = Left(arr_serial(i),laengde2_serial1)
End If

If laengde_serial2 > 0 AND laengde2_serial2 > 0 Then
rest_serial2 = Left(arr_serial2(i),laengde2_serial2)
End If

If Len(arr_serial(i)) + 3 = Len(arr_serial2(i)) Then

response.write "['" & arr_overskrift(i) & "', 'midte.asp?serial=" & arr_serial(i) & "', null," & vbCrLf & "<br>"

Else

response.write "['" & arr_overskrift(i) & "', 'midte.asp?serial=" & arr_serial(i) & "', null]," & vbCrLf & "<br>"

End If

If Len(arr_serial(i)) - 3 = Len(arr_serial2(i)) Then
response.write "],"
End If

End Function


strQuery = "SELECT COUNT(*) AS antal_poster FROM varegrupper"
Set RS = Myconn.Execute(strQuery)
i = 1

antal_poster = Cint(RS("antal_poster"))

Dim arr_id()
redim preserve arr_id(antal_poster)
Dim arr_serial()
redim preserve arr_serial(antal_poster)
Dim arr_serial2()
redim preserve arr_serial2(antal_poster)
Dim arr_overskrift()
redim preserve arr_overskrift(antal_poster)

strQuery = "SELECT * FROM varegrupper ORDER BY serial"
Set RS = Myconn.Execute(strQuery)
do while not RS.eof

arr_id(i) = RS("id")
arr_serial(i) = RS("serial")
arr_overskrift(i) = RS("overskrift")

i2 = i - 1
i = i + 1
arr_serial2(i2) = RS("serial")
RS.movenext
loop
Myconn.Execute(strQuery)

For i = LBound(arr_id) to UBound(arr_id)
Call udskriv_menu(arr_id, arr_serial, arr_serial2, arr_overskrift, i, i2)
Next

%>

Den er ikke finpoleret, der mangler stadig et par småting, såsom at lukke nogle klammer ].
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