Avatar billede mskjoldp Novice
18. juli 2009 - 00:11 Der er 8 kommentarer

stop for next løkke og restart den igen

Hey E

Hvordan stopper jeg en for next løkke og restarter den igen ?

fx
for i = 0 to ubound(arrray,2)
...bla. bla. kode
stop løkken hvis i = 67 og start forfra men fra i = 68(eller 67)
stop løkken hvis i = 167 og start forfra men fra i = 167

next

?? :)
Avatar billede Slettet bruger
18. juli 2009 - 00:22 #1
Nu kan jeg ikke ASP syntaks, men du kunne prøve noget a la:

for i = 0 to ubound(arrray,2)
...bla. bla. kode

if (i != 67) {
Blah, blah kode.
}
if (i != 167) {
Blah, blah kode
}
next
Avatar billede erikjacobsen Ekspert
18. juli 2009 - 00:26 #2
Svaret er, at det gør du ikke. Hvad er problemet, som du vil løse?
Avatar billede softspot Forsker
18. juli 2009 - 09:22 #3
Du kan lave en offset-variabel som vedligeholder et indeks i arrayet og bare lade for løkken køre en total iterering af arrayet...

din i, offset
offset = 0
for i = 0 to ubound(arr,2)
  ' Håndter nulstilling af offset
  if i = 67 or i = 167 then
    offset = 0
  end if

  ' Aflæs arrayets værdi fra det aktuelle offset
  var = arr(0,offset)

  ' Sæt offset til at pege på det næste element i arrayet
  offset = offset + 1
next
Avatar billede mskjoldp Novice
18. juli 2009 - 09:35 #4
#erikjacobsen
jeg benytter et array der akkumulere dataafstande og tider fra en gps. i præsentationen af data benytter jeg rs.GetRows og gennemløber arrayet og opstiller heri at hvis der er mere end 60 sek mellem to dataLogs (datediff("s",varTid_1,varTid_2) > 60) SÅ er det så at jeg gerne vil ha at arrayet akkumulere på ny fra den 'række' som arrayet ellers er nået til...

koden ser således ud:
<!--#include virtual="/autolog/functions.asp" -->
<title>GPS Log</title>
<%
Dim arrMitArray, antal, e, i, a
    strSQL = "SELECT * FROM GPS_base"
    rs_custom strSQL,3,""
        if rs.EOF or rs.BOF then
            response.Write("fejl i db-udtræk")
        else
            arrMitArray = rs.GetRows
        end if
    rs_end() %>
    <%
    for i = 0 to Ubound(arrMitArray,2)-1
        for e = 0 to Ubound(arrMitArray,1)
            if e = 3 or e = 4 or e = 5 then ' 3.time 4.min 5.sek
                Dim varTime_1, varTime_2, varMin_1, varMin_2, varSek_1, varSek_2, varTid_1, varTid_2
                varTime_1 = arrMitArray(3,i)
                varMin_1 = arrMitArray(4,i)
                varSek_1 = arrMitArray(5,i)
                varTid_1 = varTime_1&":"&varMin_1&":"&varSek_1
                varTime_2 = arrMitArray(3,i+1)
                varMin_2 = arrMitArray(4,i+1)
                varSek_2 = arrMitArray(5,i+1)
                varTid_2 = varTime_2&":"&varMin_2&":"&varSek_2
            end if
        next
        if datediff("s",varTid_1,varTid_2) > 60 then
            dim varTidsInt
            varTidsInt = varTidsInt & i &"."
        end if
    next
'    response.Write(varTidsInt)
    Dim varNRi
    varNRi = split(varTidsInt,";")
    %>
    <br>
    <table border="1" cellspacing="2" cellpadding="2" style="font-weight:bold; text-align:right; vertical-align:text-top; font-family:Arial, Helvetica, sans-serif;">
    <tr>
    <td>År</td>
    <td>Md</td>
    <td>Dag</td>
    <td>Time</td>
    <td>Min</td>
    <td>Sek</td>
    <td>N</td>
    <td>E</td>
    <td>Højde</td>
    <td>x</td>
    <td>y</td>
    <td>z</td>
    <td>GPS id</td>
    <td>afstand</td>
    <td>akkumuleret</td>
    <td>Tid</td>
    <td>Tidsforskel</td>
    </tr>
<%    for i = 0 to Ubound(arrMitArray,2)-1 %>
    <tr>
    <%    for e = 0 to  Ubound(arrMitArray,1) %>
        <td style="vertical-align:top;">
    <%    Dim Ngrad, Ngrad_1, Ngrad_2, Egrad, Egrad_1, Egrad_2, High, High_1, High_2
            Ngrad_1 = replace(arrMitArray(6,i),".",",")
            Ngrad_2 = replace(arrMitArray(6,i+1),".",",")
'            Ngrad = ((Ngrad_1)-(Ngrad_2))
            Egrad_1 = replace(arrMitArray(7,i),".",",")
            Egrad_2 = replace(arrMitArray(7,i+1),".",",")
'            Egrad = ((Egrad_1)-(Egrad_2))
            High_1 = replace(arrMitArray(8,i),".",",")
            High_2 = replace(arrMitArray(8,i+1),".",",")
'            High = ((High_1)-(High_2))
            response.Write(replace(arrMitArray(e,i),".",","))
            if e = 3 or e = 4 or e = 5 then ' 3.time 4.min 5.sek
'            Dim varTime_1, varTime_2, varMin_1, varMin_2, varSek_1, varSek_2, varTid_1, varTid_2
            varTime_1 = arrMitArray(3,i)
            varMin_1 = arrMitArray(4,i)
            varSek_1 = arrMitArray(5,i)
            varTid_1 = varTime_1&":"&varMin_1&":"&varSek_1
            varTime_2 = arrMitArray(3,i+1)
            varMin_2 = arrMitArray(4,i+1)
            varSek_2 = arrMitArray(5,i+1)
            varTid_2 = varTime_2&":"&varMin_2&":"&varSek_2
            end if
            %>
        </td>
    <%    next %>
        <td>
        <%
        Dim varTalToARCSIN, PI, varARCSIN, Z
        PI = 3.14159265358979
        varTalToARCSIN = (SQR((SIN((((PI/180)*Ngrad_1)-((PI/180)*Ngrad_2))/2)^2)+COS(((PI/180)*Ngrad_1))*COS(((PI/180)*Ngrad_2))*(SIN((((PI/180)*Egrad_1)-((PI/180)*Egrad_2))/2)^2)))
        Z = Sqr(-varTalToARCSIN * varTalToARCSIN + 1)
        If Abs(Z) <> 0 Then
            varARCSIN = Atn(varTalToARCSIN / Z)
        Else
            varARCSIN  = (PI/2)
        End If
        Dim varAfstand, varAfs_1, varAfs_2
        varAfstand = (6371.1*(2*varARCSIN))
        response.Write(varAfstand & "<br>")
        varAfs_1 = varAfs_1 + varAfstand
        varAfs_2 = varAfs_2 + varAfstand
        %>
        </td>
        <td>
        <%=(varAfs_2)%>
        </td>
        <td>
        <%=FormatDateTime(varTid_1,vbLongTime)%>
        </td>
        <td>
        <%=datediff("s",varTid_1,varTid_2)%>
        </td>
    </tr>
<%    next %>
    </table>
    <font style="position:absolute; top:8px; left:10px;"><%=varAfs_1&" KM"%></font>
Avatar billede erikjacobsen Ekspert
18. juli 2009 - 09:53 #5
Du skal altså finde sekvenser af tider, der ikke afviger med mere end 60 sekunder. Er der mere end 60 sekunder imellem, så er det en ny sekvens.

(Præcis hvad du skla med sekvensen har jeg ikke sat mig ind i)

Nedenstående kode udskriver dette:

Starting sequence 1 1 30 60 90
Starting sequence 2 1000 1030 1060 1090
Starting sequence 3 2000 2030 2060 2090
Starting sequence 4 3000 3030 3060 3090

Og det er vel ca. hvad du skal have. Koden, hvor vi ikke genstarter for-løkken, er så ca.:

<%

  dim a(15)

  a(0)=1
  a(1)=30
  a(2)=60
  a(3)=90

  a(4)=1000
  a(5)=1030
  a(6)=1060
  a(7)=1090

  a(8)=2000
  a(9)=2030
  a(10)=2060
  a(11)=2090

  a(12)=3000
  a(13)=3030
  a(14)=3060
  a(15)=3090


  dim seqno
  seqno = 0

  dim oldval
  oldval = -1000000

  for i=0 to ubound(a)
    if a(i)-oldval > 60 then
        seqno=seqno+1
        response.write("<br>Starting sequence " & seqno)
    end if
    response.write(" " & a(i))
    oldval = a(i)
  next

%>
Avatar billede mskjoldp Novice
18. juli 2009 - 10:15 #6
tjaaa....
jeg er ikke helt sikker på at jeg kan gennemskue og tilpasse det til min kode....
som jeg har tiltænkt koden, så er det i selve dataarrayet at jeg finder ud af ved hvilket i (fx 67, 255, 677) at der er mere end 60 mellem data-'rækkerne' dertil er de 60 sek en variable jeg senere opstiller at brugeren skal kunne tilpasse...

Som jeg læser dit indlæg, så definere du a til 15, betyder det at jeg skal definere mit array-antal?
dit array skal vel også omkranse min tidligere kode.... ?
Avatar billede erikjacobsen Ekspert
18. juli 2009 - 10:20 #7
Min kode er bare en skitse. Det jeg kalder "a" svarer til dit array. Dit array indeholder mere information, som jeg ikke forholder mig til.
Avatar billede mskjoldp Novice
18. juli 2009 - 11:19 #8
jeg prøver at tilpasse koden og ideen... jeg vender tilbage med info om det lykkedes....
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