Avatar billede svjensen Nybegynder
01. juni 2004 - 21:09 Der er 22 kommentarer og
1 løsning

Kontrollere om tal er indeholdt i array.

Jeg har et array defineret som:

Str = "''"
While not rsNumbersUsed.EOF
    Str = Str & ", '" & rsNumbersUsed("cd_id") & "'"
    rsNumbersUsed.MoveNext
Wend

Jeg looper nu gennem en række tal, og vil gerne have tallet vist hvis det ikke er en del af arrayet:

For i = 1 To rsTopNumber("top_number")
    If i IN Str Then
        response.write i & "<br>"
    End If
Next

Men linien med 'If i IN Str Then' driller. Hvad skal jeg ændre?
Avatar billede thesurfer Nybegynder
01. juni 2004 - 21:13 #1
if instr(str, TALLET) then

Jeg mener at "str" er reserveret.. prøv "streng" (på dansk) i stedet..
Avatar billede thesurfer Nybegynder
01. juni 2004 - 21:14 #2
ahh... du vil check om tallet "i" er i "str: if instr(str, i) then
Avatar billede thesurfer Nybegynder
01. juni 2004 - 21:16 #3
men husk lige på, at selve tallet "i", ikke behøver at stå alene, i dit ekspempel..
f.eks.: tallet 1, indgår jo i: 1, 11, 21, 31, 41, 51, osv..

Og man plejer ikke at bruge ' tegn uden om tal:
Str = Str & ", '" & rsNumbersUsed("cd_id") & "'"

dvs (helst uden mellemrum, da det bliver nemmere at splitte senere):
Str = Str & "," & rsNumbersUsed("cd_id")

Se denne gode lektion om arrays: http://html.dk/tutorials/asp/lektion8.asp
Avatar billede svjensen Nybegynder
01. juni 2004 - 22:07 #4
Hvordan kommer jeg udover problemet med at 1 indgår i fx 11 og 12?

instr virker i øvrigt fint, men du har en pointe med hensyn til ovenstående.
Avatar billede thesurfer Nybegynder
01. juni 2004 - 22:11 #5
Kig lektion 8 igennem.. og huske ikke at bruge mellemrum, i dit array.. det er "nemmere" at arbejde med (synes jeg), men serveren er ligeglad :-)

Lektion 8 er vejen frem :-)
Avatar billede thesurfer Nybegynder
01. juni 2004 - 22:13 #6
og jeg ville nok bruge:

str = ""
do While not rsNumbersUsed.EOF
    Str = Str & rsNumbersUsed("cd_id") & ","
    rsNumbersUsed.MoveNext
loop

str = left(str, len(str) - 1) ' fjern det sidst komma

astr = split(str, ",") 'astr = en hjemmelavet forkortelse til arraystring
Avatar billede svjensen Nybegynder
01. juni 2004 - 22:14 #7
Skal jeg forstå dig derhen, at du foreslår at jeg spiltter arrayet, og gennemløber det?

Jeg har i øvrigt i mellemtiden testet løsningen igen, og der er ikke noget problem med 1 i 11 og 12.

Jeg bruger:

Streng = ""
While not rsNumbersUsed.EOF
    Streng = Streng & "," & rsNumbersUsed("cd_id")
    rsNumbersUsed.MoveNext
Wend

For i = 1 To rsTopNumber("top_number")
    If instr(Streng, i) Then
    Else
        response.write i & "<br>"
    End If
Next

Og det giver det ønskede resultat.
Avatar billede thesurfer Nybegynder
01. juni 2004 - 22:16 #8
Hvis det virker fint, er det fint :-)

Det var bare om det var ok, at 1 også indgik i "1, 11, 12, 13, 14, ..."..

Hvis det ikke var ok, skal du splitte arrayet..
Avatar billede thesurfer Nybegynder
01. juni 2004 - 22:30 #9
Kan spm'et afsluttes/lukkes eller har du brug for yderligere hjælp?
Avatar billede svjensen Nybegynder
01. juni 2004 - 22:39 #10
Nu har jeg prøvet, at smide de i et array vha.:

Streng = ""
While not rsNumbersUsed.EOF
    Streng = Streng & "," & rsNumbersUsed("cd_id")
    rsNumbersUsed.MoveNext
Wend
arr_Streng = Split(Streng, ",")

For i = 1 To rsTopNumber("top_number")
    match = "false"
    For j = 0 To UBound(arr_Streng)
        If i = arr_Streng(j) Then
            match = "true"
        End If
    Next
    If match = "false" Then
        response.write i  & "<br>"
    End If
    match = "false"
Next

Men det medfører, at jeg får udskrevet alle tal i (altså 0 til top_number)
Avatar billede svjensen Nybegynder
01. juni 2004 - 22:40 #11
Det skulle selvfølgelig være 1 til rsTopNumber("top_number")
Avatar billede thesurfer Nybegynder
01. juni 2004 - 22:44 #12
Giv et eksempel på indholdet af rsTopNumber("top_number")..

Hvis jeg har forstået det her rigtigt..
- du henter nogle tal fra rsNumbersUsed("cd_id") og smider det i "streng"
- derefter looper du, og udskriver tallet fra streng, hvis det er lig "i"..

eller hvad..?

Jeg tror at jeg har misforstået et eller andet, så kan du ikke lige forklare det, med dine egne ord (hele sætninge. :-D)..?
Avatar billede svjensen Nybegynder
01. juni 2004 - 22:46 #13
rsTopNumber indeholder "SELECT MAX(cd_id) FROM programmer" altsådet højeste tal, i dette tilfælde 107.
Jeg henter derefter alle tal ind i arr_Streng, hvilket konkret er alle tal fra 1 til 107 med undtagelse af 12 og 103.

Jeg vil så gerne have listet de tal der (op til 107), der ikke er indeholdt i arr_Streng, altså ikke er brugt.
Avatar billede svjensen Nybegynder
01. juni 2004 - 22:48 #14
Tallene i arr_Streng kommer vha. "SELECT DISTINCT cd_id FROM programmer ORDER BY cd_id"
Avatar billede thesurfer Nybegynder
01. juni 2004 - 23:54 #15
Jeg vil prøve at kigge på det i morgen.. indtil da, skal det være:

If CInt(i) = CInt(arr_Streng(j)) Then
Avatar billede svjensen Nybegynder
02. juni 2004 - 22:34 #16
CInt giver:

Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens: 'CInt'
Avatar billede thesurfer Nybegynder
02. juni 2004 - 23:32 #17
hmm.. underligt.. jeg testede med VB og det accepterede den..
Hvordan set din CInt-kode ud?
Avatar billede svjensen Nybegynder
03. juni 2004 - 20:17 #18
strSQLTopNumber = "SELECT MAX(cd_id) AS top_number FROM programmer"
    set rsTopNumber = conn.execute(strSQLTopNumber)

    strSQLNumbersUsed = "SELECT DISTINCT cd_id FROM programmer ORDER BY cd_id"
    set rsNumbersUsed = conn.execute(strSQLNumbersUsed)
   
    Streng = ""
    While not rsNumbersUsed.EOF
        Streng = Streng & "," & rsNumbersUsed("cd_id")
        rsNumbersUsed.MoveNext
    Wend
    arr_Streng = Split(Streng, ",")

    For i = 1 To rsTopNumber("top_number")
        match = ""
        For j = 0 To UBound(arr_Streng)
            If CInt(i) = CInt(arr_Streng(j)) Then
                match = "ja"
            End If
        Next
        If match = "" Then
            response.write i  & "<br>"
        End If
        match = ""
    Next
Avatar billede thesurfer Nybegynder
03. juni 2004 - 20:50 #19
Noget kunne tyde på, at "rsNumbersUsed" er tom..

Når du bruger database, skal du altid først checke om der er nogle records..
Da både "rsTopNumber" og "rsNumbersUsed" skal indeholde noget, ser det nogenlunde sådan ud:

strSQLTopNumber = "SELECT MAX(cd_id) AS top_number FROM programmer"
    set rsTopNumber = conn.execute(strSQLTopNumber)

if not (rsTopNumber.bof or rsTopNumber.eof) then

    strSQLNumbersUsed = "SELECT DISTINCT cd_id FROM programmer ORDER BY cd_id"
    set rsNumbersUsed = conn.execute(strSQLNumbersUsed)
   
    if not (rsNumbersUsed.bof or rsNumbersUsed.eof) then

        Streng = ""
        While not rsNumbersUsed.EOF
            Streng = Streng & "," & rsNumbersUsed("cd_id")
            rsNumbersUsed.MoveNext
        Wend
        arr_Streng = Split(Streng, ",")

        For i = 1 To rsTopNumber("top_number")
            match = ""
            For j = 0 To UBound(arr_Streng)
                If CInt(i) = CInt(arr_Streng(j)) Then
                    match = "ja"
                End If
            Next
            If match = "" Then
                response.write i  & "<br>"
            End If
            match = ""
        Next
    else
        response.write "rsNumbersUsed er tom!"
    end if
else
    response.write "rsTopNumber er tom!"
end if


- Kommer der stadig fejl?
Avatar billede svjensen Nybegynder
03. juni 2004 - 21:25 #20
Samme fejl. Jeg i øvrigt positivt at de to sql-kald indeholder data, og vel og mærke de rigtige.
Avatar billede svjensen Nybegynder
04. juni 2004 - 16:00 #21
Så er det løst. Jeg fjernede første karakter i Streng ',' før jeg splittede den til array'et. Det virkede.

Tak for hjælpen. Du har fortjent pointene for at hjælpe mig på vej.
Avatar billede thesurfer Nybegynder
04. juni 2004 - 18:57 #22
ahh.. ja, det burde jeg ha' set.. normalt plejer jeg at gøre sådan her:

for...
streng = streng & nyværdi & ",2
next

streng = left(streng, len(streng) - 1) ' fjerner det sidste ","
arrStreng = split(streng, ",")

osv..
Avatar billede thesurfer Nybegynder
04. juni 2004 - 18:59 #23
LOL! Jeg skriver det her (indlæg 01/06-2004 22:13:32): http://www.eksperten.dk/spm/504967#rid4646388 :-)
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging