Avatar billede websam Nybegynder
11. august 2005 - 12:29 Der er 25 kommentarer og
1 løsning

Array der kan indeholde 1 - 3 elementer ?

Hejsa,

Jeg har et array der kan indeholde fra et til tre elementer altså :

arrtest(0)
arrtest(1)
arrtest(2)

men da det ikke er altid at array 1 eller 2 eller nogen af dem er til stede mangler jeg en mulighed for tjekke oop på det, nogen ideer ?

/Websam
Avatar billede websam Nybegynder
11. august 2005 - 12:32 #1
jeg laver følgende :

Dim arrTest As Array
arrTest = Split(dv(0)("Test"), ";")

If arrTest(0) = "" Then
    blabla = ""
Ens If

Men det virker jo ikke når der ikke er noget i arrTest(0)

/Websam
Avatar billede softspot Forsker
11. august 2005 - 12:33 #2
UBound(arrtest) indeholder antallet af elementer...

ellers kan du teste med isEmpty(arrtest) for at se om der er indhold på et indeks.
Avatar billede softspot Forsker
11. august 2005 - 12:34 #3
Woops! ASP.NET (det er jo også hele 5 minutter siden jeg hjalp dig med et andet ASP.NET spm. så det kan være lidt svært at huske så langt... :))
Avatar billede softspot Forsker
11. august 2005 - 12:35 #4
Hedder den ikke Length på et array-objekt...
Avatar billede softspot Forsker
11. august 2005 - 12:36 #5
og i øvrigt: hvad betyder "Men det virker jo ikke når der ikke er noget i arrTest(0)"? Hvis du laver en split, så vil der vel altid være mindst et element (altså element 0)...?
Avatar billede softspot Forsker
11. august 2005 - 12:37 #6
...eller mener du "når der ikke er noget i dv(0)"?
Avatar billede websam Nybegynder
11. august 2005 - 12:45 #7
når der ikke er noget i dv(0) eller at der kun er noget i det første element så vil den jo fejle når jeg tjekker op på andet element :o)
Avatar billede websam Nybegynder
11. august 2005 - 12:49 #8
jeg får jo bare denne fejl når der ikke er noget i et givent array :

Index was outside the bounds of the array.
Avatar billede arne_v Ekspert
11. august 2005 - 12:54 #9
kan du ikke:

If arrTest(1) <> Nothing Then

?
Avatar billede softspot Forsker
11. august 2005 - 12:55 #10
Åh ja, det er jo et 2D-array - det havde jeg ikke lige lagt mærke til... :(

Nå, men humlen må vel være (uanset hvormange dimensioner der er i dit array) at når du vil vide hvormange elementer der er i det, så kan du finde ud af det med .Length-egenskaben... kan det ikke bruges til noget...? Har jeg stadig ikke fattet hvad det er du har problemer med? Jeg famler lidt efter noget mere information om hvad det er du arbejder på (kode) og hvad det er du rent faktisk vil opnå. Håber du kan hjælpe mig med at hjælpe dig :)
Avatar billede softspot Forsker
11. august 2005 - 12:58 #11
Såvidt jeg kan se, så vil du enten få en fejl i denne linie

arrTest = Split(dv(0)("Test"), ";")

hvis der ikke er noget element der hedder dv(0)("Test"). Hvis der er noget, men det er en tom streng vil du få et array ud af linien og dermed vil testen

If arrTest(0) = "" Then

være ok, da selv en tom streng der splittes vil give en tom streng i element 0 af det resulterende array... Derfor forstår jeg ikke hvori dit problem består ud fra det du siger :)
Avatar billede websam Nybegynder
11. august 2005 - 13:03 #12
arne_v >> jeg mener det is nothing istedet for <> nothing, men jeg får stadig fejlen uanset hvilken jeg bruger og det er jo fordi der ikke er et arrTest(0) eller 1,2 for den sags skyld.

softspot >> Forfra, jeg vil ganske enkelt trække et ; sepperet tal fra mit dataview og smide det i et array for at kunne bruge det til visning i et tekstfelt. nogle gange er der ikke noget at vise andre gange 1, 2 el. 3 tal som jo så ligger i mit array, men jeg bliver nød til at tjekke op på om de enkelte indeholder noget, altså om f.eks arrTest(1) holder på et tal

/Websam
Avatar billede websam Nybegynder
11. august 2005 - 13:05 #13
ok men jeg skal altid tjekke på alle 3 :

If arrTest(0) = "" Then
  '--- fortage mig noget
end If

If arrTest(1) = "" Then
'--- fortage mig noget
end If

If arrTest(2) = "" Then
'--- fortage mig noget
end If

og så er det det går galt kan du nok se
Avatar billede softspot Forsker
11. august 2005 - 13:10 #14
Vil den streng du skal separere altid indeholde det samme antal semikoloner (f.eks. "1;2;3;" eller "1;;;"), eller vil der kun være semikolon efter behov (f.eks. "1" eller "1;2"). Hvis det sidste er tilfældet (hvilket jeg ville synes var mest naturligt, men hey - der kan jo være andre grunde til at det er anderledes :)), så skulle du kunne benytte den test jeg har fablet om tidligere, nemlig .Length på arrTest. Altså noget i stil med:

if arrTest.Length >= 1 and arrTest(0) <> "" then
  bla bla blah
end if
if arrTest.Length >= 2 and arrTest(1) then
  mere bla blah
end if
if arrTest.Length >= 3 and arrTest(2) then
  endnu mere bla blah
end if
Avatar billede softspot Forsker
11. august 2005 - 13:12 #15
Hmmm... det går vel nok godt for mig! :P

if arrTest.Length >= 1 and arrTest(0) = "" then
  bla bla blah
end if
if arrTest.Length >= 2 and arrTest(1) = "" then
  mere bla blah
end if
if arrTest.Length >= 3 and arrTest(2) = "" then
  endnu mere bla blah
end if
Avatar billede websam Nybegynder
11. august 2005 - 13:18 #16
Lige bortset fra and arrTest(0) <> "" så ser det ud til at virke og ja det er 1;2;3 og ikke 1;2;3; el. 1;;;
Avatar billede websam Nybegynder
11. august 2005 - 13:19 #17
så fik jeg testet med både 1,2 og 3 tal i db og det virker smid et svar :o)
Avatar billede softspot Forsker
11. august 2005 - 13:20 #18
Gooodt såååh! :D
Avatar billede softspot Forsker
11. august 2005 - 13:20 #19
Ja, det skal jeg nok :)
Avatar billede softspot Forsker
11. august 2005 - 13:53 #20
Tak for point :)
Avatar billede arne_v Ekspert
11. august 2005 - 17:36 #21
OK

Jeg troede at det var referncer der ikke var sat

a la:

Imports System

Public Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Dim a(3) As String
        a(0) = "ABC"
        a(1) = "XYZ"
        Dim i As Integer
        For  i = 0 To 2
            If a(i) <> Nothing Then
                Console.WriteLine("a(" & i & ") = " & a(i))
            Else
                Console.WriteLine("a(" & i & ") = Nothing")
            End If
        Next
    End Sub
End Class

når du skal teste på arrayets længde er det selvfølgelig .Length du skal bruge
Avatar billede arne_v Ekspert
11. august 2005 - 17:40 #22
må jeg iøvrigt foreslå at du holder dig lang væk fra Microsoft.VisualBasic namespacet

så Split bruges som:

Imports System

Module Main
    Sub Main()
        Dim s As String = "a;b;;d"
        Dim parts() As String = s.Split(";".ToCharArray)
        Dim i As Integer
        For i = 0 To parts.Length - 1
            If parts(i) <> "" Then
                Console.WriteLine(parts(i))
            Else
                Console.WriteLine("mangler")
            End If
        Next
    End Sub
End Module
Avatar billede arne_v Ekspert
11. august 2005 - 17:42 #23
[jeg undskylder for at det er console apps, men det er simpelthen hurtigere
for mig at lave end en ASP.NET side - og VB.NET er helt det samme]
Avatar billede websam Nybegynder
11. august 2005 - 18:10 #24
arne_v >> Cool med nogle eksempler, men hvad mener du med at jeg ikke skal benytte namespacet ?

Grunden til at jeg benytter mig af if sætninger er fordi jeg har 3 textboxe med hvert deres id hvor så de 3 tal skal smides i hver deres, men det kunne da være sjovt at høre om jeg kunne komme om ved det på en anden måde end med if sætninger ?
Avatar billede websam Nybegynder
11. august 2005 - 18:13 #25
by the way så skal du ikke undskylde dine forsøg lavet i vb.net(console) der er jo ikke den store forskel på det og så asp.net skrevet i vb :o)
Avatar billede arne_v Ekspert
11. august 2005 - 18:21 #26
Microsoft.VisualBasic namespacet indeholder alle de VB6/VBS kompatible funktioner:
Split, Mid etc.

Men jeg vil klart anbefale at bruge de ægte .NET metoder (String .Split og String .Substring)
fremfor dem
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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