Avatar billede cronck Nybegynder
27. juli 2004 - 11:06 Der er 37 kommentarer og
1 løsning

Function Virker ikke

Min funktion giver "Subscript out of range"
og markerer linien '    If arrSplit(1) = Index Then '
Hvad gør jeg galt?
Jeg kalder funktionen sådan her:

TheArray = GetConnectionArray(1)

Og her er min kode:

Dim arrUsers(400) As String
Dim arrSplit() As String
Dim x As Integer

Public Function GetConnectionArray(Index As Integer) As Integer
Dim strData As String
For x = 0 To 400
    strData = arrUsers(x)
    arrSplit() = Split(strData, "|")
    If arrSplit(1) = Index Then
        CheckNull = x
    End If
Next
End Function
Avatar billede cronck Nybegynder
27. juli 2004 - 11:08 #1
Og det første array ser for eks. sådan her ud "Unknown|1|Unknown"
Avatar billede hubs Nybegynder
27. juli 2004 - 11:08 #2
Har du prøvet med "For x = 1 To 400" i stedet for?
Avatar billede hubs Nybegynder
27. juli 2004 - 11:10 #3
kan ikke lige huske om array def: for arr(400) er 0 til 400 eller 1 til 400 eller måske 0 til 399 c",)
Avatar billede Slettet bruger
27. juli 2004 - 11:12 #4
Er du sikker på at strData altid har det korrekte format ellers kan du ikke regne med at du kan lave arrSplit(1) da første element ligger på index 0.
Avatar billede cronck Nybegynder
27. juli 2004 - 11:12 #5
Ja, det har jeg også prøvet...
Men nu finder jeg ligepludselig ud af at det måske ikke er der fejlen...
Undersøger det lige nærmere
Avatar billede cronck Nybegynder
27. juli 2004 - 11:21 #6
Hmm... hvordan kan man stoppe For, Next?
Jeg vil for eks. gerne stoppe den ved CheckNull
Avatar billede hubs Nybegynder
27. juli 2004 - 11:24 #7
Vil du stoppe functionen er det jo bare at smide en Exit Function ind
Avatar billede tubber Juniormester
27. juli 2004 - 11:25 #8
hvis det kun er for løkken du vil stoppe så er det Exit For
Avatar billede cronck Nybegynder
27. juli 2004 - 11:51 #9
Ok... Det var løkken jeg ville stoppe...
Jeg har faktisk fået alt sammen til at virke nu... min bedste ½ time i den seneste tid... :-)

Tubber, du fortjener 10 point, og hubs 20... Svarer i begge 2 :D
Avatar billede hubs Nybegynder
27. juli 2004 - 11:54 #10
Det er helt okay, jeg behøver ikke point, gi dem bare til tubber eller behold dem til en anden god gang c",)
Avatar billede cronck Nybegynder
27. juli 2004 - 12:07 #11
Hmm... Der opstår også pludselige problemer igen... :-)
jeg venter lige med at dele point ud...
Avatar billede hubs Nybegynder
27. juli 2004 - 12:09 #12
*lol*  c",) hva er problemet?
Avatar billede cronck Nybegynder
27. juli 2004 - 12:12 #13
Det er stadig det samme problem... :(
Den skal finde brugernavnet på den som lukker forbindelsen.. Data'en ligger således i arrUsers "Username|WinsockConnection|Blabla..."

Public Function GetConnectionUser(Index As Integer) As String
Dim strData As String
For x = 1 To 400
    strData = arrUsers(x)
    arrSplit() = Split(strData, "|")
    If arrSplit(1) = Index Then
        CheckNull = arrSplit(0)
        Exit For
    End If
Next
End Function

Private Sub winsock_Close(Index As Integer)
    Dim UserName As String
    UserName = GetConnectionUser(Index)
End sub
Avatar billede hubs Nybegynder
27. juli 2004 - 12:28 #14
Hmm jeg kan sku ikke lige umiddelbart se hvor fejlen skulle ligge, er det stadigvæk den samme fejlmeddeleses du får ?
Avatar billede sjh Nybegynder
27. juli 2004 - 12:28 #15
hvad er -> CheckNull ??
Avatar billede hubs Nybegynder
27. juli 2004 - 12:31 #16
og hvornår opstår fejlen? Når den at køre noget af loop'et igennem eller...?
Avatar billede cronck Nybegynder
27. juli 2004 - 12:34 #17
Stadig "Subscript out of range" i linien
    If arrSplit(1) = Index Then

CheckNull? tror jeg nok bliver sat ind "As string" efter funktionen
Avatar billede cronck Nybegynder
27. juli 2004 - 12:37 #18
altså, er det ikke CheckNull der gør at funktionen returnerer en streng?
Avatar billede cronck Nybegynder
27. juli 2004 - 12:38 #19
http://www.eksperten.dk/spm/523475 : 26/07-2004 22:54:06
Avatar billede cronck Nybegynder
27. juli 2004 - 12:46 #20
Ahh.. Man skal bare skrive Function navn = og så returnerer den det.. :)
Avatar billede hubs Nybegynder
27. juli 2004 - 12:48 #21
Du skal skrive navnet på den function du bruger. CheckNull er bare et ex. som blev brugt for at illustrere c",)
Avatar billede sjh Nybegynder
27. juli 2004 - 12:48 #22
se nu lige på mine kommentar..

Public Function GetConnectionUser(Index As Integer) As String
Dim strData As String
For x = 1 To 400
    strData = arrUsers(x)
    arrSplit() = Split(strData, "|") '<- Du jo ikke opdele strData Hvis den er tom.
    If arrSplit(1) = Index Then '<- Klart du for fejl da arrSplit(1) ikke findes
        CheckNull = arrSplit(0)
        Exit For
    End If
Next
End Function
Avatar billede hubs Nybegynder
27. juli 2004 - 12:48 #23
Skulle vist lige ha' opdateret spørgsmålet inden jeg sendte c",)
Avatar billede sjh Nybegynder
27. juli 2004 - 12:52 #24
cronck > Prøv med den her..

Public Function GetConnectionUser(Index As Integer) As String
Dim strData As String
  For x = 1 To 400
    strData = arrUsers(x)
    arrSplit() = Split(strData, "|")
    If UBound(arrSplit) > 0 Then 'Tjekker om arrSplit() er sat..
      If arrSplit(1) = Index Then
        CheckNull = arrSplit(0)
        Exit For
      End If
    End If 'End UBound(..
  Next
End Function
Avatar billede cronck Nybegynder
27. juli 2004 - 12:52 #25
Nu Virker Det! :D

Public Function GetConnectionUser(Index As Integer) As String
Dim strData As String
For x = 1 To 400
    strData = arrUsers(x)
    If strData <> "" Then
        arrSplit() = Split(strData, "|")
        If arrSplit(1) = Index Then
            GetConnectionUser = arrSplit(0)
            Exit For
        End If
    End If
Next
End Function
Avatar billede hubs Nybegynder
27. juli 2004 - 12:53 #26
Godt så c",)
Avatar billede cronck Nybegynder
27. juli 2004 - 12:55 #27
Jeg takker mange gange for jer begge's hjælp...
Hubs, er du stadig ikke interesseret i point?
Splitter lige over hvis at du er....
Avatar billede hubs Nybegynder
27. juli 2004 - 12:55 #28
Nej ellers tak du, behold dem bare til en anden god gang c",)
Avatar billede cronck Nybegynder
27. juli 2004 - 13:08 #29
sjh? tubber? vil i dele?
Avatar billede sjh Nybegynder
27. juli 2004 - 13:10 #30
Nej ikke mig.. behold dem bare selv eller gi dem til tubber..
Avatar billede cronck Nybegynder
27. juli 2004 - 14:19 #31
Tubber?
Avatar billede tubber Juniormester
27. juli 2004 - 15:39 #32
Nope keep em :)
Avatar billede cronck Nybegynder
27. juli 2004 - 15:49 #33
Hm! :-)
Avatar billede cronck Nybegynder
27. juli 2004 - 17:12 #34
Hmm... Jeg har lavet en ny funktion, og selvfølgelig den medfølgende fejl...
Fejl: Expected Array, og så markerer den '' arrSplit() = ''

Min Kode:

Public Function Chat(Index As String, Text As String, Kind As String)
Dim strData As String
Dim arrSplit As String
AddToLog "Funktion started"
For x = 0 To IntMax
    strData = arrUsers(x)
    If strData <> "" Then
        arrSplit() = Split(strData, "|")
        Select Case Kind
        Case "Chat"
            If arrSplit(0) <> "Unknown" Then
            Winsock(x).SendData EncryptText("Chat|" & User & ": " & Text & "|Chat")
            AddToLog "Sent the message to a user"
        End Select
    End If
Next
End Function

Kan i hjælpe igen så?
Avatar billede cronck Nybegynder
27. juli 2004 - 17:28 #35
Har bemærket at der mangler en "End If" efter linien med AddToLog "Sent the message to a user"
Avatar billede cronck Nybegynder
27. juli 2004 - 17:36 #36
bare glemt det.. oprettet nyt spm... :-)
Avatar billede tubber Juniormester
27. juli 2004 - 18:48 #37
Dim arrSplit As String er jo en streng og ikke et array ?
Avatar billede cronck Nybegynder
27. juli 2004 - 21:28 #38
nej, havde glemt () efter arrSplit... :D
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