for i = lbound(arr1) to ubound(arr1) for t = lbound(arr2) to ubound(arr2) if arr1(i) = arr2(t) then arr3(ubound(arr3)) = arr1(i) redim preserve arr3(ubound(arr3)+1) end if next next if ubound(arr3) > 0 then redim preserve arr3(ubound(arr3)-1)
for i = lbound(arr3) to ubound(arr3) Response.write arr3(i) & "<br>" next %>
Dim B, s, s2, s3, s4 s2="," & join(A2,",") & "," s3="," & join(A3,",") & "," s4="," & join(A4,",") & "," for i=Lbound(A1) to Ubound(A2) if instr(s2, "," & A1(i) & ",")>0 and ... and ... således fortsættes med s3 og s4 then s=s & "," & A1(i) end if B=split(s,",") nu inndeholder tabellen (eller arrayet) B de elementer, der er med i alle 4 tabeller Øvre grænse for B: er Ubound(B) nedre er 0.
ny rettelse (det er ikke gost at sidde at skrive direkte ind her) for i=Lbound(A1) to Ubound(A1) skal det selv følgelig være. Her er det igen:
Dim B, s, s2, s3, s4 s2="," & join(A2,",") & "," s3="," & join(A3,",") & "," s4="," & join(A4,",") & "," for i=Lbound(A1) to Ubound(A1) if instr(s2, "," & A1(i) & ",")>0 and instr(s3,...) and instr(s4,...) then s=s & "," & A1(i) end if next B=split(s,",") nu indeholder tabellen (eller arrayet) B de elementer, der er med i alle 4 tabeller Øvre grænse for B: er Ubound(B) nedre er 0.
Her er min endelige version med en lille forbedring og en rettelse (der kom et komma for meget med): Dim B, s, s2, s3, s4 s2="," & join(A2,",") & "," s3="," & join(A3,",") & "," s4="," & join(A4,",") & "," for i=Lbound(A1) to Ubound(A1) if instr(s2, "," & A1(i) & ",")>0 then if instr(s3, "," & A1(i) & ",")>0 then if instr(s4, "," & A1(i) & ",")>0 then s=s & "," & A1(i) end if end if end if next s=mid(s,2) B=split(s,",")
Nu indeholder tabellen B alle de tal, der er i alle 4 tabeller.
Her så skal dine 4 arrys baer hedder: arr1, arr2, arr3, arr4 navne kan du lave om så prøv denne kode. Den laver et array arrEns men alle der er ens:
strArr = Join(arr1,",") & "," & Join(arr2,",") & "," & Join(arr3,",") & "," & Join(arr4,",") arr = Split(strArr,",") str = "," & strArr & "," nyStr = "," sindex = inStr(1,str,",") for i = lbound(arr) to ubound(arr) sindex = inStr(sindex+1,str,",") if inStr(sindex, str,"," & arr(i) & ",") > 0 then if inStr(1,nyStr,"," & arr(i) & ",") = 0 then nyStr = nyStr & arr(i) & "," end if end if next
if len(nyStr) > 1 then nyStr = Mid(nyStr,2,len(nyStr)-2) arrEns = Split(nyStr,",") for i = lbound(arrEns) to ubound(arrEns) Response.write arrEns(i) & "<br>" next end if
eagleeye>>Men er opgaven ikke at finde de elementer, der forekommer i alle 4 tabeller? Får du ikke et element med, hvis det er med 2 gange i arr1 og ellers ikke forekommer?
Til gengæld vil min programstump kunne få et element med flere gange i B, hvis det forekommer flere gange i A1 og i alle de andre også. Hvis dette ikke må ske skal s=s & "," & A1(i) ændres til if inStr(s & "," , "," & A1(i) & ",")=0 then s=s & "," & A1(i) end if
Dim B, s, s2, s3, s4 s2="," & join(ResHus,",") & "," s3="," & join(ResPersoner,",") & "," s4="," & join(ResDyr,",") & "," for i=Lbound(ResUge) to Ubound(ResUge) if instr(s2, "," & ResUge(i) & ",")>0 then if instr(s3, "," & ResUge(i) & ",")>0 then if instr(s4, "," & ResUge(i) & ",")>0 then s=s & "," & ResUge(i) end if end if end if next s=mid(s,2) B=split(s,",")
Hvad gør du så, hvis en tabel er tom? Et forslag, som dog ikke er helt effektivt: Erstat de tomme tabeller med en af de ikke tomme (helst den korteste).
Jeg har jo et problem med de tomme. Kan du putte et tjek ind i koden ovenfor som tjekker om et array er tomt? Jeg kan ikke lige gennemskue hvor den evt. skal ind.
Ellers har jeg lavet en variabel for hver array der returnere en "true" hvis arrayet har indhold og ellers en "false".
Den simple men ikke helt kønne løsning (nu er jeg blevet bidt af poblemet, så jeg laver måske en pænere):
Lav 4 variable Tom1,...,Tom4, som er "false" hvis den tilsvarende tabel er tom og ellers "true". Vi får også brug for at arbejde med et dynamisk array A0 og 4 nye variable t1, t2, t3, t4: dim A0, t1, t2, t3, t4 t1=join(ResUge,",") t2=join(ResHus,",") t3=join(ResPersoner,",") t4=join(ResDyr,",")
if Tom1 then if Tom2 then if Tom3 then if Tom4 then 'Alt er tomt, og så stopper festen else A0=split(t4,",") end if else A0=split(t3,",") end if else A0=split(t2,",") end if else A0=split(t1,",") end if
Nu er A0 ikke tom og er lig den første af tabellerne, der ikke er tom.
for-løkken skal nu starte således:
for i=Lbound(A0) to Ubound(A0)
De 3 if-sætninger i for-løkken ovenfor ændres til if Tom2 or instr(s2, "," & ResUge(i) & ",")>0 then if Tom3 or instr(s3, "," & ResUge(i) & ",")>0 then if Tom4 or instr(s4, "," & ResUge(i) & ",")>0 then
Øhm.. var det sådan her du mente? Jeg får en type mismatch. Du må gerne få nogle flere point.
dim A0, t1, t2, t3, t4 t1=join(ResUge,",") t2=join(ResHus,",") t3=join(ResPersoner,",") t4=join(ResDyr,",")
if ResUgeR then if ResHusR then if ResPersonerR then if ResDyrR then 'Alt er tomt, og så stopper festen else A0=split(t4,",") end if else A0=split(t3,",") end if else A0=split(t2,",") end if else A0=split(t1,",") end if
Dim B, s, s2, s3, s4 s2="," & join(ResHus,",") & "," s3="," & join(ResPersoner,",") & "," s4="," & join(ResDyr,",") & "," for i=Lbound(A0) to Ubound(A0) if ResHusR or instr(s2, "," & ResUge(i) & ",")>0 then if ResPersonerR or instr(s3, "," & ResUge(i) & ",")>0 then if ResDyrR or instr(s4, "," & ResUge(i) & ",")>0 then s=s & "," & ResUge(i) end if end if end if next s=mid(s,2) B=split(s,",")
Hvor får du en type mismatch? Lagde du mærke til at mine variable tom1, tom2,... skal være sande, hvis tabellen er tom og ellers falsk? Har du lavet ResHusR, ResUgeR... sådan? Du skal også vælge, hvordan du skal reagere, hvis alle 4 tabeller er tomme. Ups. Nu ser jeg fejlen: ResUge(i) skal nu være A0(i). Det står der 4 steder i for-løkken. Du har nok ladet ResUge være tom? Nu er det A0, det handler om.
Ok, nu har jeg vendt mine true - false variabler og udskiftet det du skrev. Får stadig en Type mismatch 'join' på linien med "t2=join(ResHus,",")".
dim A0, t1, t2, t3, t4 t1=join(ResUge,",") t2=join(ResHus,",") t3=join(ResPersoner,",") t4=join(ResDyr,",")
if ResUgeR then if ResHusR then if ResPersonerR then if ResDyrR then 'Alt er tomt, og så stopper festen else A0=split(t4,",") end if else A0=split(t3,",") end if else A0=split(t2,",") end if else A0=split(t1,",") end if
Dim B, s, s2, s3, s4 s2="," & join(ResHus,",") & "," s3="," & join(ResPersoner,",") & "," s4="," & join(ResDyr,",") & "," for i=Lbound(A0) to Ubound(A0) if ResHusR or instr(s2, "," & A0(i) & ",")>0 then if ResPersonerR or instr(s3, "," & A0(i) & ",")>0 then if ResDyrR or instr(s4, "," & A0(i) & ",")>0 then s=s & "," & A0(i) end if end if end if next s=mid(s,2) B=split(s,",")
Så lav testen if Ubound(ResHus)=-1 then ResHusR=True t2="" end if og tilsvarende med de andre. Så får du samtidig tildelt værdier til de boolske variable.
Nedenstående returnerer fejlen: Type mismatch: 'Ubound' line 213 Linie 213 er "if Ubound(ResHus)=-1 then".
if Ubound(ResUge)=-1 then ResUgeR=True t1="" end if
if Ubound(ResHus)=-1 then ResHusR=True t2="" end if
if Ubound(ResPersoner)=-1 then ResPersonerR=True t3="" end if
if Ubound(ResDyr)=-1 then ResDyrR=True t4="" end if
dim A0, t1, t2, t3, t4 if ResUgeR then t1=join(ResUge,",") if ResHusR then t2=join(ResHus,",") if ResPersonerR then t3=join(ResPersoner,",") if ResDyrR then t4=join(ResDyr,",")
if ResUgeR then if ResHusR then if ResPersonerR then if ResDyrR then 'Alt er tomt, og så stopper festen else A0=split(t4,",") end if else A0=split(t3,",") end if else A0=split(t2,",") end if else A0=split(t1,",") end if
Dim B, s, s2, s3, s4 s2="," & join(ResHus,",") & "," s3="," & join(ResPersoner,",") & "," s4="," & join(ResDyr,",") & "," for i=Lbound(A0) to Ubound(A0) if ResHusR or instr(s2, "," & A0(i) & ",")>0 then if ResPersonerR or instr(s3, "," & A0(i) & ",")>0 then if ResDyrR or instr(s4, "," & A0(i) & ",")>0 then s=s & "," & A0(i) end if end if end if next s=mid(s,2) B=split(s,",")
Godt jeg har fusket. Fyldt alle de tomme arrays med data fra de andre. Case closed. Hvis du er interesseret i noget freelance programmering så smid mig en mail på skywalkerNOSPAM@imma.dk. Fjern NOSPAM.
Hvordan får du skabt dine 4 tabeller ResUge ,... Hvordan ser en tom tabel ud? Jeg brugte Ubound(A)=-1 fordi det var tilfældet hvi jeg skabte A ved at bruge split på en tom streng. Så mit forslag til test af en tom tabel dur ikke. Dine test if ResUgeR then .... skal være if not ResUgeR then t1=...
Din løsning med at fylde de tomme med data fra de andre, var jo netop det, jeg forsøgte, men testen på tom duede altså ikke.
Synes godt om
Ny brugerNybegynder
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.