Avatar billede Laitings Nybegynder
09. november 2005 - 17:28 Der er 4 kommentarer og
1 løsning

Slet den første værdi i array

Jeg har en kode som skal slette fra et array som ser således ud:

  vare_der_skal_slettes = Request("sletFilmID")
  arrvare = split(session("kurv"),"|")
  vare = arrvare(0)
    for t = 1 to ubound(arrvare)
        if arrvare(t) <> vare_der_skal_slettes then
              vare = vare & "|" & arrvare(t)
        end if   
    next
    session("kurv") = vare

Problemet er at jeg ikke kan få lov at slette den første værdi i arrayet. Jeg har prøvet at ændre "for t = 1" til "for t = 0", men det gav koks.

Kan det have noget at gøre med at jeg mangler "|" før den første værdi??

Min session ser således ud:

Session("kurv") = "id0=3|id1=32|id2=5"

Hvad gør jeg???

-M
Avatar billede softspot Forsker
09. november 2005 - 17:41 #1
Du kan finde den vare der skal slettes i array'et og flytte resten af varerne en plads fremad i array'et, redim til en mindre en der var før og så joine tilbage til en streng...


insertPos = 0
vare_der_skal_slettes = Request("sletFilmID")
arrvare = split(session("kurv"),"|")
for t = 0 to ubound(arrvare)
  if arrvare(t) = vare_der_skal_slettes then
    arrvare(t) = ""
  else
    insertPos = insertPos + 1
  end if   
  if insertPos <> t then
    arrvare(insertPos) = arrvare(t)
  end if
next
redim preserve arrvare(ubound(arrvare) - 1)
session("kurv") = join(arrvare)
Avatar billede Laitings Nybegynder
09. november 2005 - 17:49 #2
Hmmm jeg får denne fejlmeddelelse:

Der opstod en Microsoft VBScript-kørselsfejl (0x800A0009)
Indekset er uden for området: 'insertPos'
i denne linje:
    arrvare(insertPos) = arrvare(t)
Avatar billede Laitings Nybegynder
09. november 2005 - 17:55 #3
Det var hvis jeg slettet nogle andre end den første.

Hvis jeg sletter den første får jeg meddelelsen:

ADODB.Field (0x80020009)
Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post.
Avatar billede Laitings Nybegynder
09. november 2005 - 18:48 #4
Så lykkedes det. Den endelige kode:

dim slet, film, arrFilm, i

  slettes = Request("sletFilmID")
  arrFilm = split(Session("kurv"), "|")
  film = ""
   
    if Ubound(arrFilm) >= 1 then
        for i = LBound(arrFilm) to UBound(arrFilm)
          if arrFilm(i) <> slettes then film = film & arrFilm(i) & "|"
        next
        film = left(film, len(film) - 1)
        Session("kurv") = film
    else
        Session("kurv") = ""
    end if


-M
Avatar billede softspot Forsker
09. november 2005 - 18:50 #5
ADODB.Field!?!? Hvor kommer den fra? Det er da bare et array vi arbejder med...
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