06. marts 2005 - 13:02Der 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>
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>
hvad med en case Select Case Overskrift2(i) Case "ETIC" Response.Write(".") Case "Vbem" Response.Write(".") Case "STA9" Response.Write(".") Case Else End Select
<% 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 %>
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 -------------------------------------
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 %> ----------------------------------------------
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>
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)...?
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%>
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.
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)
Super begge to, i skal have tak :) Gode forklaringer
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.