Avatar billede mskjoldp Novice
06. marts 2005 - 13:02 Der er 12 kommentarer og
2 løsninger

optimering af if then

Det må da være muligt at skrive denne kode kortere!

IIS5.0/ASP

Jeg laver et array:
Overskrift2 = Array("Plan dato","Ind dato","Ud dato","Lokation","Eftersyn","ETIC","Egress","Våben","Dinghy","Stel","Vbem","STA1","STA2","STA3","STA4","STA5","STA6","STA7","STA8","STA9")

senere vil jeg gerne sætte . ind når løkken herunder når til nogen specifikke overskrifter.

Men jeg bliver nød til at skrive en if then sætning for hver . jeg vil have sat inde.

løkke:
                for i = 0 to ubound(Overskrift2)
                    tal1 = tal1 + 1%>
                    <td id="1.<%=tal1%>" onClick="markerkolonne(this,'#99CCCC');" class="lodret"><%if Overskrift2(i) = "ETIC" then Response.Write(".") end if%><%if Overskrift2(i) = "STA9" then Response.Write(".") end if%><%=Overskrift2(i)%></td>
                <% next %>
                </tr>

kan man ikke skrive det bedre?

jeg havde tænk på noget lign.:

Overskrift2 = Array("Plan dato","Ind dato","Ud dato","Lokation","Eftersyn","ETIC","Egress","Våben","Dinghy","Stel","Vbem","STA1","STA2","STA3","STA4","STA5","STA6","STA7","STA8","STA9")
Opdeling = Array("ETIC", "Vbem", "STA9")

                for i = 0 to ubound(Overskrift2)
                    tal1 = tal1 + 1%>
                    <td id="1.<%=tal1%>" onClick="markerkolonne(this,'#99CCCC');" class="lodret"><%if Overskrift2(i) = Opdeling(i) then Response.Write(".") end if%><%=Overskrift2(i)%></td>
<% next %>
            </tr>

men det virker heller ikke...

Nogen forslag? :)
Avatar billede busschou Praktikant
06. marts 2005 - 13:42 #1
hvad med en case
Select Case Overskrift2(i)
Case "ETIC" Response.Write(".")
Case "Vbem" Response.Write(".")
Case "STA9" Response.Write(".")
Case Else
End Select
Avatar billede mskjoldp Novice
06. marts 2005 - 14:48 #2
ok, men hvordan vil det se ud indsat i kode?
Avatar billede busschou Praktikant
06. marts 2005 - 14:56 #3
<%
for i = 0 to ubound(Overskrift2)
  tal1 = tal1 + 1
%>
<td id="1.<%=tal1%>" onClick="markerkolonne(this,'#99CCCC');" class="lodret">
<%
Select Case Overskrift2(i)
Case "ETIC" Response.Write(".")
Case "Vbem" Response.Write(".")
Case "STA9" Response.Write(".")
Case Else
End Select
Response.Write (Overskrift2(i)&"</td>")
next
%>
Avatar billede busschou Praktikant
06. marts 2005 - 14:57 #4
Jeg er lidt i tvivl om hvordan selec case i asp kan defineres
I de fleste sprog vil man kunne skrive noget a la følgende i stedet for
------------------------------------
Select Case Overskrift2(i)
Case "ETIC","Vbem","STA9" Response.Write(".")
Case Else
End Select
-------------------------------------
Avatar billede busschou Praktikant
06. marts 2005 - 14:59 #5
Hvis Select Case kan skrives så kompakt så vil jeg foreslå noget a la
----------------------------------
<%
for i = 0 to ubound(Overskrift2)
  tal1 = tal1 + 1
%>
<td id="1.<%=tal1%>" onClick="markerkolonne(this,'#99CCCC');" class="lodret">
<%
Select Case Overskrift2(i)
Case "ETIC","Vbem","STA9" Response.Write("."&Overskrift2(i)&"</td>")
Case Else Response.Write (Overskrift2(i)&"</td>")
End Select
next
%>
----------------------------------------------
Avatar billede mskjoldp Novice
06. marts 2005 - 15:21 #6
hmm. kigger på det...
Avatar billede eagleeye Praktikant
07. marts 2005 - 10:34 #7
Du kan også lave en liste med de overskrifter som der skal . ind ved, eks:


strList = "ETIC,STA9,STA2"


og så lave koden sådan her:

                strList = "ETIC,STA9,STA2"
                for i = 0 to ubound(Overskrift2)
                    tal1 = tal1 + 1%>
                    <td id="1.<%=tal1%>" onClick="markerkolonne(this,'#99CCCC');" class="lodret"><%if instr(1,","&strList&",",","&Overskrift2(i)&",",1)>0 then Response.Write(".") end if%><%=Overskrift2(i)%></td>
                <% next %>
                </tr>
Avatar billede mskjoldp Novice
09. marts 2005 - 20:51 #8
Busschou ... tak for foreslagene... jeg synes nu ikke koden bliver specielt kortere med case select.

eagleeye ... det ser interessant ud... vil du forklare hvad der sker i denne del af koden?: <%if instr(1,","&strList&",",","&Overskrift2(i)&",",1)>0 then Response.Write(".") end if%>

jeg fatter fint fra >0... men før..!? hvad sker der med alle de kommaer og de to 1-taller i starten og enden :)
Og hvordan/hvor i koden står der at strlist holdes op mod Overskrift2(i)...?
Avatar billede mskjoldp Novice
16. marts 2005 - 12:57 #9
nogen der vil tjene points ved at forklare hvad denne kode gør:
<%if instr(1,","&strList&",",","&Overskrift2(i)&",",1)>0 then Response.Write(".") end if%>
Avatar billede busschou Praktikant
16. marts 2005 - 13:01 #10
den tjekker om din overskrift er i strengen
Avatar billede busschou Praktikant
16. marts 2005 - 13:02 #11
Avatar billede eagleeye Praktikant
16. marts 2005 - 17:01 #12
Hej ja jeg vil gerne forklare det.

Den korte version er som busschou har beskrevet den tjekker om din overskrift er i den streng med overskrifter som der skal . foran.

Lidt mere forklaring så bruger if sætningen inStr som kan finde en streng i en anden streng. Den returnere enten 0 eller index til hvor strengen findes.
Grunden til der er så mange kommaer er fordi den skal sikre at den ikke finde en overskrift som den del af en anden overskrift så for at der kommer et . skal den finde  ",overskrift,". 
Eks disse overskrifter er i listen:
strList = "ETIC,STA9,STA2"

Hvis du så har en overskrft "STA" og søger i strengen "ETIC,STA9,STA2" vil den finde "STA" og sætte . selvom "STA" ikke ordret i listen. Hvis man så sætter komma foran og bagved listen så den bliver ",ETIC,STA9,STA2," og det man søger efter ",STA," så vil den ikke sætte . da ",STA," ikke findes et sted i strengen.

Håber det er forklaring nok :)
Avatar billede busschou Praktikant
16. marts 2005 - 17:14 #13
selve inStr kan der læses mere om i definitionen som jeg gav tidliger
Men smart triks ellers eagleeye
Den have jeg ikke luret, men i din kommentar 07/03-2005 10:34:13 havde du heller ikke sat ekstra komma ind foran og bag i listen :o)
Avatar billede mskjoldp Novice
23. marts 2005 - 23:16 #14
Super begge to, i skal have tak :) Gode forklaringer
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