---
title: "Split och arrays"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/95287-split-och-arrays"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Sebbe"
published: "2004-01-20T15:05:52.000Z"
updated: "2004-01-27T14:22:14.000Z"
replies: 15
views: 476
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/95287-split-och-arrays"
---

# Split och arrays

## #1 — Sebbe, 2004-01-20T15:05Z

Jag börjar bli lite lagom irriterad på detta nu! Håller på och gör ett upload-script utan komponent, liknande OveRRidEs, dels för att jag har lite att göra och dels för att hjälpa en annan kille som behöver det.

Nu till problemet: i metoden till klassen som plockar ut vanliga textfält i formuläret måste jag använda Split() på en array för att få ut rätt fält för att plocka ut värdet.
När jag använder den här koden: 

```
arrMatch = Split(arrFields(intForm), vbCrLf)
```

får jag felmeddelandet 

> Microsoft VBScript runtime error '800a0009' 
> 
> Subscript out of range: 'intForm' 
> 
> /sebbe/upload/class.asp, line 144

Men när jag skriver ut värdet i arrayen med 

```
Response.Write(Replace(arrFields(intForm), vbCrLf, "<br>")) : Response.End
```

så får jag helt rätt resultat utskrivet. Någon som har någon aning om vad som kan vara fel?

Permalänk: https://www.webforum.nu/p/95287

## #2 — @nders, 2004-01-20T15:12Z

Om du ger oss lite mer kod så kan vi fundera lite mer.

Det är inte så att du modifierar värdet på intForm lite galet?

Permalänk: https://www.webforum.nu/p/1255292

## #3 — Sebbe, 2004-01-20T15:14Z

Såhär ser hela funktionen ut:

```
Public Function Form(str)
  strBin = Request.BinaryRead(Request.TotalBytes)
  strTemp = ""

  For i = 1 To LenB(strBin)
    strTemp = strTemp & Chr(AscB(MidB(strBin, i, 1)))
  Next

  arrFields = Split(strTemp, "-----------------------------7d")

  For i = 1 To UBound(arrFields) - 1
    arrField = Split(arrFields(i), vbCrLf)

    For j = 1 To UBound(arrField)
      With New RegExp
        .IgnoreCase = True
        .Global = True
        .Pattern = "name=""[^""]+"""

        For Each Match In .Execute(arrField(j))
          strMatch = Mid(Match.Value, 7)
          strMatch = Left(strMatch, Len(strMatch) - 1)
        Next
      End With

      If Trim(LCase(strMatch)) = LCase(Trim(str)) Then
        intForm = i
        Exit For
      End If
    Next
  Next

  arrMatch = Split(arrFields(intForm), vbCrLf)
  Form = arrMatch(UBound(arrMatch) - 1)
End Function
```

Permalänk: https://www.webforum.nu/p/1255293

## #4 — @nders, 2004-01-20T15:19Z

Kolla så intForm har samma värde då det blir fel resp. rätt (dina två exempel i ditt första inlägg.

Jag hinner inte kika mer nu, men det gör säkert någon annan. :)

Mvh

Permalänk: https://www.webforum.nu/p/1255294

## #5 — Sebbe, 2004-01-20T15:21Z

När jag skriver ut intForm så skrivs det ut 2, men när jag sedan, direkt efter, testar att köra

```
arrMatch = Split(arrFields(2), vbCrLf)
```

får jag felmeddelandet

> Microsoft VBScript runtime error '800a0009' 
> 
> Subscript out of range: '\[number: 2\]' 
> 
> /sebbe/upload/class.asp, line 144

Detta är som sagt väldigt konstigt!

Permalänk: https://www.webforum.nu/p/1255295

## #6 — cyprys, 2004-01-20T15:31Z

nope. Inom datorvärlden börjar man räkna från 0.
2 element i en array får namnen:
array(0) och array(1)

Permalänk: https://www.webforum.nu/p/1255299

## #7 — Sebbe, 2004-01-20T15:34Z

> **cyprys skrev:**
>
> nope. Inom datorvärlden börjar man räkna från 0.
> 2 element i en array får namnen:
> array(0) och array(1)

Jo, men kolla nämre på funktionen. Jag ger ju intForm samma värde som kontrollvariabeln (i) i for-loopen, alltså måste ju det värdet som intForm får finnas som index i arrayen.

Permalänk: https://www.webforum.nu/p/1255303

## #8 — cyprys, 2004-01-20T16:44Z

Testa att skriva ut variablerna allteftersom funktionen körs. Vad säger den då?

Permalänk: https://www.webforum.nu/p/1255335

## #9 — Sebbe, 2004-01-20T16:54Z

Har testat det, och allt är som det ska. Jag får ju till och med rätt utskrift när jag skriver ut värdet i arrayen, men när jag ska lägga in det i en variabel av nåt slag eller använda Split() på den så får jag felmeddelande.

Permalänk: https://www.webforum.nu/p/1255342

## #10 — m_soderlund, 2004-01-21T14:53Z

Snubben som skriver [här](http://www.webwizguide.info/forum/forum_posts.asp?TID=7959&PN=2) hade skrivit fel namn på ett fält i ett formulär. Kolla speciellt på sista svaret i den tråden, kanske kan hjälpa? :D

Annars kanske denna [Google-sökning](http://www.google.com/search?hl=sv&ie=UTF-8&oe=utf-8&q=%27800a0009%27+Subscript+out+of+range&btnG=Google-s%C3%B6kning) kan ge något? :)

Permalänk: https://www.webforum.nu/p/1255698

## #11 — Sebbe, 2004-01-21T15:12Z

Koden

```
Response.Write(UBound(arrFields) & "<br><br>")

For i = 0 To UBound(arrFields)
  Response.Write(Replace(arrFields(i), vbCrLf, "<br>") & "<br><br>")
Next

Response.End
```

gav utskriften

> 4
> 
> 
> 
> 424f16a01f8
> Content-Disposition: form-data; name="test"
> 
> bla
> 
> 
> 424f16a01f8
> Content-Disposition: form-data; name="test2"
> 
> ha
> 
> 
> 424f16a01f8
> Content-Disposition: form-data; name="fil"; filename=""
> Content-Type: application/octet-stream
> 
> 
> 
> 
> 424f16a01f8--

Det som är väldigt märkligt är att det funkar att bara skriva ut array-värdet, men man kan inte lägga in det i en annan variabel!

Permalänk: https://www.webforum.nu/p/1255715

## #12 — m_soderlund, 2004-01-24T14:07Z

Fortfarande inte löst problemet? Det verkar konstigt. :l

Permalänk: https://www.webforum.nu/p/1260290

## #13 — Sebbe, 2004-01-24T17:57Z

> **m_soderlund skrev:**
>
> Fortfarande inte löst problemet? Det verkar konstigt. :l

Nej, och ja, det är konstigt.
Har dock försökt löst det på ett annat sätt, men då verkar det som om funktionen bara körs en gång. Nya koden:

```
Public Function Form(str)
  strBin = Request.BinaryRead(Request.TotalBytes)
  strTemp = ""

  For i = 1 To LenB(strBin)
    strTemp = strTemp & Chr(AscB(MidB(strBin, i, 1)))
  Next

  arrFields = Split(strTemp, "-----------------------------7d")

  For i = 1 To UBound(arrFields) - 1
    arrField = Split(arrFields(i), vbCrLf)

    For j = 1 To UBound(arrField)
      With New RegExp
        .IgnoreCase = True
        .Global = True
        .Pattern = "name=""[^""]+"""

        For Each Match In .Execute(arrField(j))
          strMatch = Mid(Match.Value, 7)
          strMatch = Left(strMatch, Len(strMatch) - 1)
        Next
      End With

      If Trim(LCase(strMatch)) = Trim(LCase(str)) Then
        strReturn = arrField(UBound(arrField) - 1)
        Exit For
      End If
    Next
  Next

  Form = strReturn
End Function
```

Och koden där jag ska använda funktionen:

```
Set objUpload = New Upload
Response.Write(objUpload.Form("test") & "<br>" & objUpload.Form("test2"))
Set objUpload = Nothing
```

Om jag byter håll på utskriften, så att test2 skrivs ut före test så skrivs dock test2 ut, men inte test. Detta är nästan lika konstigt, så hjälp välkomnas verkligen!

Permalänk: https://www.webforum.nu/p/1260369

## #14 — Sebbe, 2004-01-26T13:25Z

Ingen som har någon aning om det nya problemet heller?

Permalänk: https://www.webforum.nu/p/1261046

## #15 — m_soderlund, 2004-01-27T10:44Z

När jag har haft såna här omöjliga problem har jag i alla fall startat om datorn. ;) (LOL)
Några gånger har det fungerat efteråt. Dags att göra det för dig också? :D

Permalänk: https://www.webforum.nu/p/1261502

## #16 — Sebbe, 2004-01-27T14:22Z

Tyvärr är det så att scriptet ligger på aleborg och jag har inte möjlighet att testa det på min egen dator just nu. Kan dock testa det någon gång nästa vecka, tack för tipset. :)

Permalänk: https://www.webforum.nu/p/1261616

---

Tråden på webben: https://www.webforum.nu/amne/asp/95287-split-och-arrays
