Avatar billede andersasp Nybegynder
15. august 2008 - 11:46 Der er 6 kommentarer og
1 løsning

Fejl i array - Subscript out of range

Hejsa,

Jeg henter nogle RSS feeds og skal have dem udskrevet.. men ved nogle kilder melder mit script fejl..

Jeg har fundet ud af at det skyldes at "strItemTitle" har flere felter ("#%#") end "strItemDescription" og når dette sker melder den om fejlen:


Microsoft VBScript runtime error '800a0009'

Subscript out of range: '74'



Hvordan går jeg det således, at hvis denne fejl sker, så skal den blot køre videre til den næste post??

jeg vil helt ikke bruge "on error resume next"


    arrItemTitle         = split(strItemTitle,"#%#")
    arrItemLink         = split(strItemLink,"#%#")
    arrItemDescription     = split(strItemDescription,"#%#")
   

    ' Elementerne i channel udskrives
        for a = 0 to UBound(arrItemTitle) - 1
            'response.write "<li>"
            response.write "<p><b>" & arrItemTitle(a) & "</b>"
    response.write "<br />" & arrItemDescription(a) ' her kommer fejlen
    next
Avatar billede softspot Forsker
15. august 2008 - 11:52 #1
Hvorfor vil du ikke have det sidste element i array'et med (du trækker en fra ubound som i forvejen leverer et nul-baseret resultat)?

For at undgå fejlen kan du checke på om dit indeks er højere end antallet af elementer i array'et inden du indekserer elementet:

  if ubound(arrItemDescription) >= a then
    response.write "<br />" & arrItemDescription(a) ' her kommer fejlen... ikke længere ;-)
  end if
Avatar billede andersasp Nybegynder
15. august 2008 - 12:05 #2
Fantastisk... tusinde tak, dette har givet mig grå hår i hovedet i mange timer...

Smid et velfortjent svar :)
Avatar billede softspot Forsker
15. august 2008 - 12:10 #3
Velbekomme :)
Avatar billede softspot Forsker
15. august 2008 - 12:37 #4
Tak for point :)
Avatar billede andersasp Nybegynder
15. august 2008 - 12:49 #5
Agraa jeg fandt lige en lille fejl!! :( håber du kan hjælpe... (sig til hvis jeg skal oprette et nyt spørgsmål?)

Jeg jeg udskriver disse feeds, mixer den overskrift og beskrivelse.. dvs. en overskrift matcher ikke med beskrivelsen...

Og det går jeg ud fra sker, så de forskellige felter "#%#" ikke passer sammen.. ved ikke så meget om RSS så jeg kan sagtens tage fejl :)

Hvad skulle man ændre hvis man ville fjerne de feeds hvor de ikke passede sammen?


Jeg smider lige hele scriptet for en sikkerheds skyld..

' Adressen på det RSS-feed der skal loades
extURL = therssfeedlink

' RSS-feedet loades
set xmlDoc = createObject("Msxml.DOMDocument")
xmlDoc.async = false
xmlDoc.setProperty "ServerHTTPRequest", true
xmlDoc.load(extURL)

' Check at RSS-feedet er loadet korrekt
If (xmlDoc.parseError.errorCode <> 0) then
    ' Udskriv eventuelle fejl (for nem fejlretning)
    Response.Write "XML error: " & xmlDoc.parseError.reason
' Fortsæt hvis alt er ok
Else

    ' Åbn elementet <channel>
    set channelNodes = xmlDoc.selectNodes("//channel/*")

    for each entry in channelNodes
        ' De tre obligatoriske elementer i channel lægges i variable
        if entry.tagName = "title" then
            strChannelTitle = entry.text
        elseif entry.tagName = "description" then
            strChannelDescription = entry.text
        elseif entry.tagName = "link" then
            strChannelLink = entry.text
        end if
    next

    ' Åbn elementerne <item>
    set itemNodes = xmlDoc.selectNodes("//item/*")

    For each item in itemNodes
        ' Elementerne i channel lægges i variable med #%# som adskillelse
        if item.tagName = "title" then
            strItemTitle = strItemTitle & item.text & "#%#"
        elseif item.tagName = "link" then
            strItemLink = strItemLink & item.text & "#%#"
        elseif item.tagName = "description" then
            strItemDescription = strItemDescription & item.text & "#%#"
        end if
    next

    ' Elementerne i channel splittes i arrays
    arrItemTitle         = split(strItemTitle,"#%#")
    arrItemLink         = split(strItemLink,"#%#")
    arrItemDescription     = split(strItemDescription,"#%#")
   
    'response.write "<em>" & strItemDescription & "</em>"


    ' Elementerne i channel udskrives
    'response.write "<ul>"
        for a = 0 to UBound(arrItemTitle) - 1
            'response.write "<li>"
           
            if ubound(arrItemDescription) >= a then
                response.write "<p><b>" & arrItemTitle(a) & "</b>"
               
                response.write "<br />" & arrItemDescription(a)
            end if
            'response.write "</li>"
        next
    'response.write "</ul>"
   

    ' Vi rydder op
    set channelNodes = nothing
    set itemNodes = nothing

End If


men f.eks. får jeg en post som ser således ud:

Michael Phelps takes sixth Beijing gold in 200M medley
------------------------------------------------------------
SAN FRANCISCO (MarketWatch) -- Warner Bros. Pictures, a unit of Time Warner Inc. , said late Thursday it has delayed the release of "Harry Potter and the Half-Blood Prince" to July 19, 2009. The sixth installment of the Harry Potter franchise had been expected to open at ....
Avatar billede softspot Forsker
15. august 2008 - 14:17 #6
Jeg har desværre ikke mulighed for at komme med flere løsningsforslag til dette emne inden kl. 22 idag, da jeg har en aftale resten af dagen.

Jeg kender ikke umiddelbart noget til RSS og er heller ikke helt sikker på at jeg har forstået problemet, men jeg vil se om jeg har overskud til at kigge på den iaften.
Avatar billede andersasp Nybegynder
15. august 2008 - 14:51 #7
Tusinde tak for det, ingen stress dog :)

Jeg er dog sikker på at du er bedre til det end mig...

jeg har oprettet et nyt spørgsmål, så hvis du får tid ville det være dejligt, og hvis ikke må du have en rigtig god weekend :)

http://www.eksperten.dk/spm/841784
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