Avatar billede decrypto Nybegynder
30. marts 2004 - 18:40 Der er 25 kommentarer og
1 løsning

Hvordan spørger på om et array er tomt

Hvordan spørger på om et array er tomt, eller omvendt om et array har indhold???

Jeg kan jo ikke spørger på om et array's upperbound er større end 0.

Jeg prøver følgende....
----------------------------------

If Cint(Ubound(a)) >= 0 Then
        Response.write "Der er indhold i array'et "
Else
    Response.Write "Der er ikke noget indhold."
End If
----------------------------------
Men jeg får en subscript out of range. og det er jo klar, man kan jo ikke lave en Ubound på ingenting.

dEcRyPt0
Avatar billede thesurfer Nybegynder
30. marts 2004 - 18:42 #1
if Ubound(a) > 0 then
  response.write "noget"
else
  response.write "tomt"
end if
Avatar billede thesurfer Nybegynder
30. marts 2004 - 18:43 #2
Det burde virke.. prøv uden CInt.
Avatar billede thesurfer Nybegynder
30. marts 2004 - 18:44 #3
Eller:
if Ubound(a) < LBound(a) then
'tomt
else
' noget
end if
Avatar billede decrypto Nybegynder
30. marts 2004 - 18:55 #4
Vi prøver....
Avatar billede decrypto Nybegynder
30. marts 2004 - 18:58 #5
Men kan jeg ikke på en eller anden måde spørge om det eret array eller ikke et array. For jeg definerer at det er et array, når jeg har fundet noget at smide ned idet.
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:03 #6
Dim m_arrIndhold()

------ Hvis der er noget så smid det ned i et array ---------
If Not objrsDB.eof Then
ReDim m_arrIndhold(0)
Set objIndhold = New clsIndhold
  objIndhold.intWebSideId    =    objrsDB("WEBSIDE_ID")
  objIndhold.strSkabelonFil    =    objrsDB("SKABELON_FIL") 
Set m_arrIndhold(intCount)     =    objIndhold
End If

----------- Spørg efter om det er indhold i array ---------
if Ubound(a) < LBound(a) then
    Response.Write "Der findes en side"
    Response.End
else
    Response.Write "Der findes ikke en side"
    Response.End
end if
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:08 #7
Ovenstående virker ikke.....
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:12 #8
hmm jeg var lidt for hurtigt med at skrive min kode ind her. Så jeg kan godt forstå, hvis ovenstående forvirrer. Jeg vil på en måde bare teste om m_arrIndhold() er tom. Eller omvendt om der er indhold i m_arrIndhold().

Er der nogen der ved hvordan man gør det???
Avatar billede thesurfer Nybegynder
30. marts 2004 - 19:14 #9
hvad med?:
if m_arrIndhold() = null then
'tom
else
'noget
end if

Det er ikke testet.
Avatar billede thesurfer Nybegynder
30. marts 2004 - 19:15 #10
Man burde da kunne gøre sådan her:

if ubound(m_arrIndhold()) = 0 then
'tom
....

du kan jo prøve med:

response.write m_arrIndhold()
response.end
Avatar billede thesurfer Nybegynder
30. marts 2004 - 19:16 #11
rettelse: response.write ubound(m_arrIndhold())

Men jeg må indrømme at det her ikke er min stærke side.. så måske skulle jeg holde igen, med mine forslag..? :-)
Avatar billede nmh Nybegynder
30. marts 2004 - 19:16 #12
Hvis du har erklæret det med en fast dimension, som f.esk.
dim A(0) eller dim B(1) vil A(0), B(0) og B(1) eksistere.
Om de er tomme kræver at du undersøger hver enkelt komponent.

Hvis du erklærer A således:
dim A
A=split(s,",")
så er A uden felter, når Ubound(A) er lig -1.
Avatar billede nmh Nybegynder
30. marts 2004 - 19:19 #13
Så vidt jeg ved, er det den eneste måd, du ved hjælp af Ubound kan afgøre det.
dim A()
så vil Ubound ikke være defineret, før du har redimensioneret A.
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:26 #14
Sorry friends

Hvis Ubound(a) = 0 så er der noget i indeks adressen '0'.
Jeg kan ikke lave en ubound på ingenting, derfor får jeg en fejl. Subscript out of range.

Jeg tror jeg vil lade være med at erklære min variabel som et array, og prøve mig frem derfra.
Avatar billede nmh Nybegynder
30. marts 2004 - 19:28 #15
Når du vil vide om et array er tomt, er det så et spørgsmål om hvorvidt A(0) er defineret, eller er det spørgsmålet om om
A(0)="", A(1)="",...,A(n)="" ??

Du kan ved at benytte
On Error resume next
derefter spørge på A(0)
Hvis Err.number<>0 så er A(0) ikke defineret.

Det vil virke i alle tilfælde.
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:28 #16
Nej det virker sgu heller ikke, det er noget være høøøø alt det her.
Avatar billede nmh Nybegynder
30. marts 2004 - 19:29 #17
En kommentar til dit sidste indlæg:
dim A(0)

Nu er Ubound(A) lig 0.
Avatar billede nmh Nybegynder
30. marts 2004 - 19:30 #18
Prøv at sige lidt mere om, hvad dit problem egentlig er.
Hvordan skaber du dit array?
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:38 #19
I får lige hele smøren her.
Dette er min metode
------------------------------------------
Public Function Returner_ForsideTemplateNavn(intWebstedId)
  Call doConnectDB()
  Dim objIndhold
  Dim m_arrIndhold()
               
  strSQL = "SELECT WEBSIDE.IDNR AS WEBSIDE_ID, SKABELON.SKABELON_FIL "&_
        " FROM SKABELON INNER JOIN WEBSIDE ON SKABELON.IDNR = WEBSIDE.SKABELON_ID WHERE WEBSIDE.FORSIDE=1 AND WEBSIDE.WEBSTED_ID=" & numConvertToDBNum(intWebstedId) & " AND (DATE() >= START_DATO AND  DATE() <=  SLUT_DATO) ORDER BY RAEKKEFOLGE;"
Set objrsDB = objConnection.execute(strSQL)
           
  If Not objrsDB.eof Then
    ReDim m_arrIndhold(0)
    Set objIndhold = New clsIndhold
      objIndhold.intWebSideId        =    objrsDB("WEBSIDE_ID")
      objIndhold.strSkabelonFil        =    objrsDB("SKABELON_FIL") 
    Set m_arrIndhold(intCount)        =    objIndhold
  End If
  objrsDB.close

  Set objrsDB = Nothing
  Call doDisConnectDB()
Returner_ForsideTemplateNavn = m_arrIndhold
End Function

---------------------------------------
----Her kommer mit 'main program'------

Dim  a

Set objIndhold = New clsHentIndhold
a = objIndhold.Returner_ForsideTemplateNavn(intWebstedId)
   
if Ubound(a) = null then
    Response.Write "Der findes en side"
    Response.End
else
    Response.Write "Der findes ikke en side"
    Response.End
end if
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:41 #20
Det er det nederste i min 'If' 'Else' kode jeg har problemer.
Avatar billede decrypto Nybegynder
30. marts 2004 - 19:47 #21
Jeg kan godt forstå hvis det forvirrer. Det lidt avanceret vb kode.
Avatar billede eagleeye Praktikant
30. marts 2004 - 20:24 #22
For at tjekke om et array er gyldit bruger man funktionen isArray:

Så prøv:

if isArray(a) then
    Response.Write "Der findes en side"
    Response.End
else
    Response.Write "Der findes ikke en side"
    Response.End
end if
Avatar billede decrypto Nybegynder
30. marts 2004 - 20:47 #23
Og så er der bingo......
Du får lige dine point, hvis du sender et 'dummy' svar.
Avatar billede thesurfer Nybegynder
30. marts 2004 - 20:52 #24
Avatar billede eagleeye Praktikant
30. marts 2004 - 20:58 #25
Jeps et svar :)
Avatar billede nmh Nybegynder
31. marts 2004 - 11:29 #26
Funktionen isArray(a) afgør egentlig ikke om et array er tomt, men kun om den variable a er af typen et array, og det var åbenbart det du havde brug for at få at vide.
F.eks. vil
dim A(), B
B=split(s,",")
resultere i to tomme tabeller (arrays).
Både isArray(A) og isArray(B) er sande.
Men Ubound(A) er ikke defineret.
redim A(-1)
Nu vil Ubound(A) være -1 og Ubound(B) er -1.
Nu vil man vel kalde A for et tomt array.
redim A(0)
Nu er Ubound(A) lig med 0,
og udsagnet A(0)="" er sandt, men man vil vel ikke kalde A for et tomt array.
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