Avatar billede inkognito1 Nybegynder
30. juli 2002 - 23:01 Der er 16 kommentarer og
1 løsning

Array uden brug af Javascrpt.

Jeg har fået lavet denne kode. Men ville helst det var lavet uden brug af Javascript. En der kan lave det samme i ren script.

<script type="text/javascript">
listen = new Array();
<%
do while not rs.eof
    if date() - rs(2) > 7 then
        tid = 7
    else
        tid = date() - rs(2)
    end if
    if tid = 0 then tid = 1
    if rs(0) <> "" and rs(1) <> "" and rs(2) <> "" then

%>
listen[listen.length] = new Array(<%=Round(rs(1)/tid, 0)%>,<%=rs(0)%>,'<%=rs(2)%>',<%=rs(1)%>);
<%
    end if
    rs.movenext
loop
%>
function docompare(b,c){
    return b[0] - c[0];
}
function skriv(){
    a = listen.sort(docompare).reverse();
    str = "<table>";
    for (i = 0; i < listen.length; i++){
        str += "<tr><td>" + a[i][0] + "</td>";
        str += "<td>" + a[i][1] + "</td>";
        str += "<td>" + a[i][2] + "</td>";
        str += "<td>" + a[i][3] + "</td></tr>";
    }
    str += "</table>";
    document.all.her.innerHTML = str;
}
</script>
<body onload="skriv()">
Avatar billede eagleeye Praktikant
30. juli 2002 - 23:05 #1
Det ville måske hjælpe hvis du fortalte hvad formålet var med scriptet?
Avatar billede inkognito1 Nybegynder
30. juli 2002 - 23:08 #2
Jo det er en ret lang forklaring .. men jeg kan forsøge.
Avatar billede eagleeye Praktikant
30. juli 2002 - 23:09 #3
er det et array som skal sorteres ?
Avatar billede inkognito1 Nybegynder
30. juli 2002 - 23:12 #4
som du ser her:
if date() - rs(2) > 7 then
tid = 7
else
tid = date() - rs(2)
end if

Der tjekkes om den er oprettet for mere end 7 dage siden. Hvis den ikke er så deles med antal dage som eksemlvis kan være 3.

Her deles der.
<%=Round(rs(1)/tid, 0)%>

Det er lavet som en salgs hitliste. Og netop det at der deles med forskelige dage gør at det kan ændre på række følgen. Derfor skal der bruges en funktion hvor der efterfølgende igen sorteres.
Avatar billede eagleeye Praktikant
30. juli 2002 - 23:21 #5
Avatar billede inkognito1 Nybegynder
30. juli 2002 - 23:28 #6
Uha .. du har ikke lyst til at hjælpe med at sætte det ind i min kode ??
Avatar billede eagleeye Praktikant
30. juli 2002 - 23:29 #7
du tager eksvis disse functioner og ligger i bunden af koden eller hvor de er lidt af vejen:


Sub QuickSort(vec,loBound,hiBound,SortField,SortDir)
  '==--------------------------------------------------------==
  '== Sort a multi dimensional array on SortField            ==
  '==                                                        ==
  '== This procedure is adapted from the algorithm given in: ==
  '==    ~ Data Abstractions & Structures using C++ by ~    ==
  '==    ~ Mark Headington and David Riley, pg. 586    ~    ==
  '== Quicksort is the fastest array sorting routine for    ==
  '== unordered arrays.  Its big O is n log n                ==
  '==                                                        ==
  '== Parameters:                                            ==
  '== vec      - array to be sorted                        ==
  '== SortField - The field to sort on (1st dimension value) ==
  '== loBound and hiBound are simply the upper and lower    ==
  '==  bounds of the array's "row" dimension. It's probably ==
  '==  easiest to use the LBound and UBound functions to    ==
  '==  set these.                                          ==
  '== SortDir  - ASC, ascending; DESC, Descending          ==
  '==--------------------------------------------------------==
  if not (hiBound - loBound = 0) then
      Dim pivot(),loSwap,hiSwap,temp,counter
      Redim pivot (Ubound(vec,2))
      SortDir = UCase(SortDir)

      '== Two items to sort
      if hiBound - loBound = 1 then
        if (SortDir = "ASC") then
            if FormatCompare(vec(loBound,SortField),vec(hiBound,SortField)) > FormatCompare(vec(hiBound,SortField),vec(loBound,SortField)) then Call SwapRows(vec,hiBound,loBound)
        else
            if FormatCompare(vec(loBound,SortField),vec(hiBound,SortField)) < FormatCompare(vec(hiBound,SortField),vec(loBound,SortField)) then Call SwapRows(vec,hiBound,loBound)
        end if
      End If

      '== Three or more items to sort
      For counter = 0 to Ubound(vec,2)
        pivot(counter) = vec(int((loBound + hiBound) / 2),counter)
        vec(int((loBound + hiBound) / 2),counter) = vec(loBound,counter)
        vec(loBound,counter) = pivot(counter)
      Next

      loSwap = loBound + 1
      hiSwap = hiBound

      do
        '== Find the right loSwap
        if (SortDir = "ASC") then
            while loSwap < hiSwap and FormatCompare(vec(loSwap,SortField),pivot(SortField)) <= FormatCompare(pivot(SortField),vec(loSwap,SortField))
              loSwap = loSwap + 1
            wend
        else
            while loSwap < hiSwap and FormatCompare(vec(loSwap,SortField),pivot(SortField)) >= FormatCompare(pivot(SortField),vec(loSwap,SortField))
              loSwap = loSwap + 1
            wend
        end if
        '== Find the right hiSwap
        if (SortDir = "ASC") then
            while FormatCompare(vec(hiSwap,SortField),pivot(SortField)) > FormatCompare(pivot(SortField),vec(hiSwap,SortField))
              hiSwap = hiSwap - 1
            wend
        else
            while FormatCompare(vec(hiSwap,SortField),pivot(SortField)) < FormatCompare(pivot(SortField),vec(hiSwap,SortField))
              hiSwap = hiSwap - 1
            wend
        end if
        '== Swap values if loSwap is less then hiSwap
        if loSwap < hiSwap then Call SwapRows(vec,loSwap,hiSwap)
      loop while loSwap < hiSwap

      For counter = 0 to Ubound(vec,2)
        vec(loBound,counter) = vec(hiSwap,counter)
        vec(hiSwap,counter) = pivot(counter)
      Next

      '== Recursively call function .. the beauty of Quicksort
        '== 2 or more items in first section
        if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1,SortField,SortDir)
        '== 2 or more items in second section
        if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound,SortField,SortDir)
  end if
End Sub  'QuickSort

Sub SwapRows(ary,row1,row2)
  '==------------------------------------------==
  '== This proc swaps two rows of an array    ==
  '==------------------------------------------==

  Dim x,tempvar
  For x = 0 to Ubound(ary,2)
    tempvar = ary(row1,x)
    ary(row1,x) = ary(row2,x)
    ary(row2,x) = tempvar
  Next
End Sub  'SwapRows

function FormatCompare(sOne,sTwo)
  '==------------------------------------------==
  '==  Checks sOne & sTwo, returns sOne as a  ==
  '==  Numeric if both pass isNumeric, if not  ==
  '==  returns sOne as a string.              ==
  '==------------------------------------------==

    if (isNumeric(Trim(sOne)) AND isNumeric(Trim(sTwo))) then
        FormatCompare = CDbl(Trim(sOne))
    else
        FormatCompare = Trim(sOne)
    end if
end function





'Er taget med for test
Sub PrintArray(vec,loRow,hiRow,markCol)
  '==------------------------------------------==
  '== Print out an array  Highlight the column ==
  '==  whose number matches param markCol      ==
  '==------------------------------------------==

  Dim ColNmbr,RowNmbr
  Response.Write "<table border=""1"" cellspacing=""0"">"
  For RowNmbr = loRow to hiRow
    Response.Write "<tr>"
    For ColNmbr = 0 to (Ubound(vec,2) - 1)
      If ColNmbr = markCol then
        Response.Write "<td bgcolor=""FFFFCC"">"
      Else
        Response.Write "<td>"
      End If
      Response.Write vec(RowNmbr,ColNmbr) & "</td>"
    Next
    Response.Write "</tr>"
  Next
  Response.Write "</table>"
End Sub  'PrintArray

-----------------------------------


Din loop lavers vist sådan så:

i = 0
do while not rs.eof
    if date() - rs(2) > 7 then
        tid = 7
    else
        tid = date() - rs(2)
    end if
    if tid = 0 then tid = 1
    if rs(0) <> "" and rs(1) <> "" and rs(2) <> "" then

    tempArray(i,0) = Round(rs(1)/tid, 0)
    tempArray(i,1) = rs(0)
    tempArray(i,2) = rs(2)
    tempArray(i,3) = rs(1)
    i = i+1
    end if
    rs.movenext
loop

QuickSort tempArray,lbound(tempArray),ubound(tempArray),0,"DESC"

PrintArray tempArray,lbound(tempArray),ubound(tempArray),0
Avatar billede eagleeye Praktikant
30. juli 2002 - 23:43 #8
du skal så havde defineret arrayet


Dim tempArray(50,3)  'Så der plads til 50 stk.
i = 0
Avatar billede eagleeye Praktikant
30. juli 2002 - 23:44 #9
det skal så være ,4 og ikke ,3

Dim tempArray(50,4)  'Så der plads til 50 stk.
Avatar billede inkognito1 Nybegynder
31. juli 2002 - 00:12 #10
ok .. hvordan laver jeg en udskriving hvor jeg kan styre inputs ?

Altså ved denne, komemr de jo i samem rækkefølge som det er langt ind.

Sub PrintArray(vec,loRow,hiRow,markCol)
  '==------------------------------------------==
  '== Print out an array  Highlight the column ==
  '==  whose number matches param markCol      ==
  '==------------------------------------------==

  Dim ColNmbr,RowNmbr
  Response.Write "<table border=""1"" cellspacing=""0"">"
  For RowNmbr = loRow to hiRow
    Response.Write "<tr>"
    For ColNmbr = 0 to (Ubound(vec,2) - 1)
      If ColNmbr = markCol then
        Response.Write "<td bgcolor=""FFFFCC"">"
      Else
        Response.Write "<td>"
      End If
      Response.Write vec(RowNmbr,ColNmbr) & "</td>"
    Next
    Response.Write "</tr>"
  Next
  Response.Write "</table>"
End Sub  'PrintArray
Avatar billede eagleeye Praktikant
31. juli 2002 - 00:16 #11
Ja PrintArray udskriver bare arrayet du skal kalde QuickSort og angive hvilken kolonne du vil sortere på her den første 0 og og det skal være stigne eller faldene her faldene "DESC":

'Sorter arrayet faldene efter første række
QuickSort tempArray,lbound(tempArray),ubound(tempArray),0,"DESC"

'Udskriv arrayet
PrintArray tempArray,lbound(tempArray),ubound(tempArray),0
Avatar billede eagleeye Praktikant
31. juli 2002 - 00:18 #12
Jeg smutter i seng nu, håber det hjalp lidt.
Hvis du ikke vil hvade en kolonne highligthed så skriver du bare -1 i sted for 0 når PrintArray kaldes.
Avatar billede ras2000 Nybegynder
31. juli 2002 - 11:35 #13
inkognito, grunden til jeg lavede arrayet i javascript, var at der er indbyggede sorteringsfunktioner. Jeg lavede et eksempel med en vb-array, og en sub som sorterede den, men din server timede ud. Det var faktisk præcis samme sub som eagleye foreslår.
Avatar billede ras2000 Nybegynder
31. juli 2002 - 11:36 #14
Jeg forstår ikke hvorfor du har noget imod at det foregår i javascript, det får det jo kun til at gå hurtigere.
Avatar billede inkognito1 Nybegynder
31. juli 2002 - 11:39 #15
Jeg prøver nogle forskellige løsninger. Grunden er sådan set at jeg skal ind og hente inforamtioner fra en anden database udfra ID nr. Det kunne jeg ikke lige oversjue at kombinere med Javascript.
Avatar billede ras2000 Nybegynder
31. juli 2002 - 11:44 #16
Hm, jeg kan ikke se at det skulle blive nemmere af at det foregår i VB. Men det må du selvfølgelig selv om.
Er spørgsmålet http://www.eksperten.dk/spm/235963 efterhånden ikke svaret?
Avatar billede eagleeye Praktikant
05. august 2002 - 15:43 #17
kunne det bruges ??
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