Avatar billede hestetoften Nybegynder
22. oktober 2010 - 16:28 Der er 5 kommentarer og
1 løsning

Array

hvordan får man tallene 1 - 100 skrevet i et array UDEN at skulle taste dem ind ?

I Delphi findes der en metode der ser således ud (1 .. 100,102)
er der lignende i ASP ?
Avatar billede keysersoze Guru
22. oktober 2010 - 16:36 #1
lav en løkke;

For t = 1 to 100
  'kode
Next
Avatar billede hestetoften Nybegynder
22. oktober 2010 - 16:39 #2
ville gerne undgå dette da tallene kan være 1 til 100 + 102+154+245+357 osv.
det er et array hvor jeg selv taster tallene ind.
Avatar billede softspot Forsker
22. oktober 2010 - 17:05 #3
Der findes mig bekendt ikke nogen funktion i VBScript, hvor du kan gøre som du gør i Delphi, så du skal enten selv lave en funktion som kan pakke tallene ud, eller indtaste dem manuelt.

Hvor kommer talrækken fra (brugerinput, initialisering eller noget andet)?

Er det altid tal og evt. intervaller som skal omsættes til et array af tal?

Jeg forestiller mig en funktion som kan tage en kommasepareret streng med en talrække der også kan indeholde intervalnotation, f.eks. "1-100,123,128,145". Funktionen skulle så gennemløbe hver værdi i strengen og evt. pakke intervaller ud. Til sidst skulle strengen så splittes til et array. I grove træk kunne det se nogenlunde således ud:

function udpakTalraekke(strListe)
  dim tmp, lenTmp, i, itm, start, slut, res, idx

  tmp = split(strListe, ",")
  lenTmp = ubound(tmp)
  for i = 0 to lenTmp
    itm = tmp(i)
    if instr(itm, "-") > 0 then
      start = clng(split(itm, "-")(0))
      slut = clng(split(itm, "-")(1))
      res = ""
      for idx = start to slut
        if len(res) > 0 then res = res & ","
        res = res & idx
      next
      ' læg den kommaseparerede streng tilbage i arrayet
      tmp(i) = res
    end if
  next

  ' saml arrayet til en streng for derefter at splitte den
  ' op til et array igen...
  udpakTalraekke = split(join(tmp,","),",")
end function
Avatar billede softspot Forsker
22. oktober 2010 - 19:28 #4
Du kan også lige få en version, som kan håndtere negative intervaller, samt stigende eller faldende intervaller. Jeg har vedhæftet nogle testscenarier som demonstrerer input og output:

function udpakTalraekke(strListe)
  dim tmp, lenTmp, i, itm, splitpos, start, slut, res, idx

  if len(strListe) = 0 then
    udpakTalraekke = Array()
    exit function
  end if
 
  tmp = split(strListe, ",")
  lenTmp = ubound(tmp)

  for i = 0 to lenTmp
    itm = tmp(i)
    splitpos = instr(2, itm, "-")
    if splitpos > 0 then
      start = clng(left(itm, splitpos-1))
      slut = clng(mid(itm, splitpos+1))
      res = ""
      if start < slut then
        for idx = start to slut
          if len(res) > 0 then res = res & ","
          res = res & idx
        next
      else
        for idx = start to slut step -1
          if len(res) > 0 then res = res & ","
          res = res & idx
        next
      end if
      ' læg den kommaseparerede streng tilbage i arrayet
      tmp(i) = res
    end if
  next

  ' saml arrayet til en streng for derefter at splitte den
  ' op til et array igen...
  udpakTalraekke = split(join(tmp,","),",")
end function

sub testTalraekke(talliste)
  Response.Write "[" & talliste & "] omsættes til ["
  Response.Write Join(udpakTalraekke(talliste),",")
  Response.Write "]<br/>"
end sub

call testTalraekke("1-20,25,28-32")
call testTalraekke("12,46,7,8,54,525345,1-4")
call testTalraekke("")
call testTalraekke("-1,-15,-20--25")
call testTalraekke("-150,-20-25,99")
Avatar billede hestetoften Nybegynder
21. marts 2011 - 06:16 #5
lukker
Avatar billede softspot Forsker
21. marts 2011 - 08:38 #6
Jamen, velbekomme da!
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