Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 14:36 Der er 16 kommentarer og
1 løsning

Alfabetisk sortering

Hejsa

Er der nogen der har et script til at sortere en række ord alfabetisk på følgende måde:

A
a1    a2    a3    a4
a5    a6    a7    a8

B
b1    b2    b3    b4
b5    b6    b7    b8

osv, ned til å
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 14:37 #1
Det skal selvfølgelig være i tabeller og ikke bare med mellemrum :)
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 16:28 #2
lige en ting til... :)
Det skal være i VBScript
Avatar billede eagleeye Praktikant
18. oktober 2004 - 17:34 #3
Hvor kommer ordne fra?
Er det en database eller en array?
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 17:38 #4
Det er en array
Avatar billede eagleeye Praktikant
18. oktober 2004 - 18:08 #5
Ok, du kan gøre noget i stil med dette:



<html>
<body>
<%
'Her skal dit array ind, som test er det bare en flok forskille ord:
ordArr = Split("a1,b1,c1,a2,a8,a4,b4,b3,c6,c4,a3,a5,a7,b7,c7,b6,c6,c5,b5",",")

ordArr = Sorter(ordArr)
%>
<table width="100%">
<%
ordPrRow = 0
maxPrRow = 4 
firstChar=""
for i = lbound(ordArr) to ubound(ordArr)
  if firstChar <> ucase(left(ordArr(i),1)) then
    if ordPrRow > 0 then
      Response.Write "</tr>"
      ordPrRow = 0
    end if
    firstChar = ucase(left(ordArr(i),1))
    Response.Write "<tr><td colspan=""" & maxPrRow & """>" & firstChar & "</td></tr>"
  end if
  if ordPrRow = 0 then Response.Write "<tr>" 
 
  Response.Write "<td>" & ordArr(i) & "</td>"

  ordPrRow = ordPrRow + 1
  if ordPrRow = maxPrRow then
    Response.Write "</tr>"
    ordPrRow = 0
  end if
Next
if ordPrRow > 0 then Response.Write "</tr>"
%>
</table>

</body>
</html>

<%
Function Sorter(ByVal tabel)
Dim blnContinue, i, varFirst, varSecond
blnContinue = True
Do Until blnContinue = False
  blnContinue = False
  For i = 0 to UBound(tabel)
    If i = UBound(tabel) Then Exit For
    Arr = Split(tabel(i),".")
    tmp1 = arr(0)
    if isnumeric(tmp1) then tmp1 = Int(tmp1)
    Arr = Split(tabel(i+1),".")
    tmp2 = arr(0)
    if isnumeric(tmp2) then tmp2 = Int(tmp2)
    If tmp1 > tmp2 Then
      varFirst = tabel(i)
      varSecond = tabel(i+1)
      tabel(i) = varSecond
      tabel(i+1) = varFirst
      blnContinue = True
    End If
  Next
Loop
Sorter = tabel
End Function
%>
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 21:01 #6
tak, det ser ud til at virke...

kan du lige lave et svar, så du kan få point??
Avatar billede eagleeye Praktikant
18. oktober 2004 - 21:03 #7
ok :)
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 21:10 #8
Nej, ok hvor dum kan man være.....

SORRY, SORRY, SORRY!!!!

De skulle selvfølgelig listes således:

A
a1    a4    a7    a10
a2    a5    a8    a11
a3    a6    a9    a12

B
b1    b4    b7    b10
b2    b5    b8    b11
b3    b6    b9    b12

Det andet er den måde jeg allerede bruger... Det har vist været en lang dag. :)
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 21:12 #9
På denne måde skal der tages hensyn til hvor mange ord med et givent bogstav der er i array'et, da der kun må være 4 kolonner.
Avatar billede eagleeye Praktikant
18. oktober 2004 - 21:20 #10
Den viser også kun 4 kolonner pr. række, hvis det fordi det fylder hele browseren så prøv at rette:
<table width="100%">

Til dette uden width:

<table>
Avatar billede eagleeye Praktikant
18. oktober 2004 - 21:40 #11
Mangler er mellemrum fra hvor A slutter til hvor B begynder så prøv at rette:

  if firstChar <> ucase(left(ordArr(i),1)) then
    if ordPrRow > 0 then
      Response.Write "</tr>"
      ordPrRow = 0
    end if
    firstChar = ucase(left(ordArr(i),1))
    Response.Write "<tr><td colspan=""" & maxPrRow & """>" & firstChar & "</td></tr>"
  end if



Til dette:

  if firstChar <> ucase(left(ordArr(i),1)) then
    if ordPrRow > 0 then
      Response.Write "</tr>"
      ordPrRow = 0
    end if
    if firstChar <> "" then Response.Write "<tr><td colspan=""" & maxPrRow & """>&nbsp;</td></tr>"
    firstChar = ucase(left(ordArr(i),1))
    Response.Write "<tr><td colspan=""" & maxPrRow & """>" & firstChar & "</td></tr>"
  end if
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 21:52 #12
Du har ikke set at de skal sorteres anderledes???
Avatar billede eagleeye Praktikant
18. oktober 2004 - 22:08 #13
ok :) kigger lige på det.. der skal lidt mere kode til
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 22:28 #14
Jeps... Det blev jeg klar over efter at have sidet med det ca. 4 timer idag.
Avatar billede eagleeye Praktikant
18. oktober 2004 - 22:33 #15
Det kan gøres sådan her. Hvis antallet af ord for et bogstav er imellem 3 og 9 bliver det vise i enten 3 eller 4 kolonner, da man er nød til at finde max antal pr. kolonne. Hvis antallet er 1 eller 2 er det naturvis i 1 eller 2 kolonner.


<html>
<body>

<%
ordArr = Split("a1,b1,c1,a2,a8,a4,b4,b3,a3,a5,a7,b7,c7,b6,c6,c5,d1,d2,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10",",")
ordArr = Sorter(ordArr)
%>
<table width="100%">
<%
ordPrCol = 0
maxPrRow = 4

firstChar=""
antalRows=0
for i = lbound(ordArr) to ubound(ordArr)
  if firstChar <> ucase(left(ordArr(i),1)) then
    if antalRows > 0 then
      Response.Write "</tr></table>"
      Response.Write "</tr>"
      antalRows = 0
    end if
    if firstChar <> "" then Response.Write "<tr><td colspan=""" & maxPrRow & """>&nbsp;</td></tr>"
    firstChar = ucase(left(ordArr(i),1))
    Response.Write "<tr><td colspan=""" & maxPrRow & """>" & firstChar & "</td></tr>"
    Response.Write "<tr>"
    antalKarakter = countChar(ordArr,firstChar)
    antalPrKol=abs(int(-antalKarakter/maxPrRow))   
  end if
 
  if antalRows=0 then
    Response.Write "<td valign=""top""><table>"
  end if

  Response.Write "<tr><td>" & ordArr(i) & "</td></tr>"
 
  antalRows=antalRows+1
  if antalRows=antalPrKol then
    Response.Write "</table></td>"
    antalRows=0
  end if
 
Next
if ordPrCol > 0 then Response.Write "</tr>"
%>
</table>

</body>
</html>

<%
Function Sorter(ByVal tabel)
Dim blnContinue, i, varFirst, varSecond
blnContinue = True
Do Until blnContinue = False
  blnContinue = False
  For i = 0 to UBound(tabel)
    If i = UBound(tabel) Then Exit For
    Arr = Split(tabel(i),".")
    tmp1 = arr(0)
    if isnumeric(tmp1) then tmp1 = Int(tmp1)
    Arr = Split(tabel(i+1),".")
    tmp2 = arr(0)
    if isnumeric(tmp2) then tmp2 = Int(tmp2)
    If tmp1 > tmp2 Then
      varFirst = tabel(i)
      varSecond = tabel(i+1)
      tabel(i) = varSecond
      tabel(i+1) = varFirst
      blnContinue = True
    End If
  Next
Loop
Sorter = tabel
End Function

Function countChar(tabel,char)
  dim x
  antal=0
  for x=lbound(tabel) to ubound(tabel)
    if ucase(char)=ucase(left(tabel(x),1)) then
      antal=antal+1
    end if
  next
  countChar=antal
End function

%>
Avatar billede eagleeye Praktikant
18. oktober 2004 - 23:25 #16
Skal det være sådan der er 4 også når antallet er imellem 5 og 9 så kan det laves sådan her:


<html>
<body>

<%
ordArr = Split("a1,b1,a2,a8,a4,b4,b3,a3,a5,a7,b7,b6,c1,c2,c3,c4,c5,c6,d1,d2,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10",",")
ordArr = Sorter(ordArr)
%>
<table width="100%">
<%
ordPrCol = 0
maxPrRow = 4
nrCol = 0
firstChar=""
antalRows=0
for i = lbound(ordArr) to ubound(ordArr)
 
  if firstChar <> ucase(left(ordArr(i),1)) then
    if antalRows > 0 then
      Response.Write "</tr></table>"
      Response.Write "</tr>"
      antalRows = 0
    end if
    nrCol=0
    firsteHasMax=false
    if firstChar <> "" then Response.Write "<tr><td colspan=""" & maxPrRow & """>&nbsp;</td></tr>"
    firstChar = ucase(left(ordArr(i),1))
    Response.Write "<tr><td colspan=""" & maxPrRow & """>" & firstChar & "</td></tr>"
    Response.Write "<tr>"
    antalKarakter = countChar(ordArr,firstChar)
    antalPrKol=abs(int(-antalKarakter/maxPrRow))
    if (antalPrKol*maxPrRow - antalKarakter >= antalPrKol) and (antalPrKol>1) then
      firsteHasMax=true
    end if
  end if
 
  if antalRows=0 then
    Response.Write "<td valign=""top""><table>"
  end if

  Response.Write "<tr><td>" & ordArr(i) & "</td></tr>"
 
  antalRows=antalRows+1
  if antalRows=antalPrKol then
    Response.Write "</table></td>"
    antalRows=0
    nrCol=nrCol+1
    if firsteHasMax=true then
      if (antalPrKol*nrCol+(antalPrKol-1)*(maxPrRow-nrCol)) >= antalKarakter then
      firsteHasMax=false
      antalPrKol=antalPrKol-1
      end if
    end if
  end if
 
Next
if ordPrCol > 0 then Response.Write "</tr>"
%>
</table>

</body>
</html>

<%
Function Sorter(ByVal tabel)
Dim blnContinue, i, varFirst, varSecond
blnContinue = True
Do Until blnContinue = False
  blnContinue = False
  For i = 0 to UBound(tabel)
    If i = UBound(tabel) Then Exit For
    Arr = Split(tabel(i),".")
    tmp1 = arr(0)
    if isnumeric(tmp1) then tmp1 = Int(tmp1)
    Arr = Split(tabel(i+1),".")
    tmp2 = arr(0)
    if isnumeric(tmp2) then tmp2 = Int(tmp2)
    If tmp1 > tmp2 Then
      varFirst = tabel(i)
      varSecond = tabel(i+1)
      tabel(i) = varSecond
      tabel(i+1) = varFirst
      blnContinue = True
    End If
  Next
Loop
Sorter = tabel
End Function

Function countChar(tabel,char)
  dim x
  antal=0
  for x=lbound(tabel) to ubound(tabel)
    if ucase(char)=ucase(left(tabel(x),1)) then
      antal=antal+1
    end if
  next
  countChar=antal
End function

%>
Avatar billede bjarkekr Nybegynder
18. oktober 2004 - 23:45 #17
Jeg takker rigtig mange gange... Det virker nu :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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