Avatar billede mskjoldp Novice
25. december 2004 - 04:30 Der er 22 kommentarer og
1 løsning

split dato og sorter

Hej E
(IIS 5.0 / Access / ASP /IE)

Jeg har søgt på E og fundet de koder jeg skal bruge for at kunne sortere et tekstfelt som var et datofelt, men jeg kan zq ikke skidtet til at virke... =8/

denne kode:
<%
Session.LCID = 1030  'fra default.asp
<!--#include virtual="dato.asp" -->  'hvilket er nedenstående:
    Set rs = Conn.Execute("SELECT S_plan_dato FROM fly_status ORDER BY S_plan_dato asc")
        Do Until rs.Eof
            dato = rs("S_plan_dato")
            dag = split(dato, "-")
            Response.Write(dag(0) & "-" & dag(1) & "-" & dag(2) & "<br>")
        rs.Movenext
        Loop
        rs.Close
        Set rs = Nothing%>

giver dette udtræk:
06-12-2004
06-12-2004
07-01-2005
07-12-2004
14-12-2004
22-12-2004
22-12-2004

Burde sorteringen ikke være sådan her:
06-12-2004
06-12-2004
07-12-2004
14-12-2004
22-12-2004
22-12-2004
07-01-2005

?
Avatar billede thesurfer Nybegynder
25. december 2004 - 11:10 #1
Bruger du tekstfelter til datoer? Jeg mener ikke at man kan sorterer tekstfelter.. hvis man kan, bliver det "alfabetisk".. dvs: "06", "06", "07", "07", "14", "22", "22".

Så det passer fint med, at "07-01-2005" klemmer sig ind mellem "06-12-2004" og "07-12-2004"..
Avatar billede thesurfer Nybegynder
25. december 2004 - 11:25 #2
Det er nok bedre, hvis du bruger et datofelt til datoer.. så kan du sortere med f.eks. "asc" eller "desc"..
Avatar billede mskjoldp Novice
25. december 2004 - 11:28 #3
Avatar billede mskjoldp Novice
25. december 2004 - 11:29 #4
Kommentar: ellebaek
23/12-2004 10:19:01
Avatar billede thesurfer Nybegynder
25. december 2004 - 11:35 #5
Til de dovne: http://eksperten.dk/spm/573776#rid5196359 :-)

"Det giver ingen problemer med at sortere efter dem bagefter..": Nu ved jeg ikke hvilken funktion, han bruger.. men det er nok noget i stil med BubbleSort..
Det fylder en del linier og sortere dem alfabetisk (mener jeg).. så kan man vælge at sorterer arrayen efter årstal (2004, 2005) som er dag(2).. så skulle den gerne sorterer alle 2004 og derefter 2005.
Avatar billede thesurfer Nybegynder
25. december 2004 - 11:36 #6
Det tager vist det der "kommer først" (2004 kommer før 2005, 06 før 07,14,22 osv)..
Avatar billede thesurfer Nybegynder
25. december 2004 - 11:39 #7
PS: Behøver ikker at være BubbleSort (det er vist den langsomste metode)..
Avatar billede thesurfer Nybegynder
25. december 2004 - 11:53 #8
En god bemærkning fra the_bma_man: http://www.eksperten.dk/spm/267390#rid2588237

---
Hvor får du tallene fra?
Hvis de kommer fra en database er det nemmeste at sortere dem på selectionstidspunktet.
---

Dvs, via "SELECT..."
Avatar billede mskjoldp Novice
25. december 2004 - 13:27 #9
kan ikke finde ud af koderne... jeg må bede om et eksempel der hjælper mig med at sortere på et tekstfelt som beskrevet...
Avatar billede mskjoldp Novice
26. december 2004 - 00:39 #10
ok, jeg er nået frem til denne kode der sortere tekst dato'erne som jeg gerne vil have det:

    dim filelist, arrFileList, changed, i, element, tmp
        Set rs = Conn.Execute("SELECT S_plan_dato FROM fly_status")
        Do Until rs.Eof
            rsdato = rs("S_plan_dato")
            dato = split(rsdato,"-")
            dag = dato(0)
            md = dato(1)
            aar = dato(2)
            hent = dato(0) & "-" & dato(1) & "-" & dato(2)
            hvilken = hvilken & "," & hent
        rs.Movenext
        Loop
hvilken = Mid(hvilken,2)
arrFileList = split(hvilken,",")
Sub BubbleSort(arrBubbleSort)
    changed = true
  do while changed
    changed = false
    for i = 1 to ubound(arrBubbleSort)
      if CDate(arrBubbleSort(i-1)) > CDate(arrBubbleSort(i)) then
        tmp = arrBubbleSort(i-1)
        arrBubbleSort(i-1) = arrBubbleSort(i)
        arrBubbleSort(i) = tmp
        changed = true
      end if
    next
  loop
End Sub

BubbleSort arrFileList

for each element in arrFileList
    response.write element & "<br>"
next
     

        rs.Close
        Set rs = Nothing%>
Avatar billede mskjoldp Novice
26. december 2004 - 00:40 #11
men nu skal jeg så have brugt denne sortering i min anden kodeopsætning...
Avatar billede mskjoldp Novice
26. december 2004 - 00:45 #12
som ser sådan her ud (noget beskåret):

definere hent
Set rs = Conn.Execute(hent)

bla bla tr og td bla bla

<%        tdtal = 2
            Do Until rs.Eof
                fly = rs("MOC_stelnr")
                mstatus = rs("MOC_status")
                loc = rs("MOC_enhed")
                    tdtal = tdtal + 1 %>
                        <tr onClick="this.className = 'trbgcolor';" onDblClick="this.className = '';">
                        <td id="3.1" height="17px" class="tdbgcolor">&nbsp;</td>
                        <!--#include virtual="bem.asp" -->
            <%    rs.MoveNext
                    Loop
                    rs.Close
                Set rs = Nothing%>
                </tr>
<%end if%>
    </table></div>


hvor bem.asp ser sådan ud:
                <%    Set rs2 = Conn.Execute("SELECT * FROM bem WHERE Bstel='"&fly&"' AND BEM_kol='"&"S_plan_dato"&"'")
                        if rs2.Eof OR rs2.Bof then %>
                        <td id="<%=tdtal%>.2" nowrap class="tdbgcolor" height="18px" valign="middle" onClick="parent.open('default.asp?mode=edit&amp;id=<%=rs("MOCid")%>&amp;hvad=S_plan_dato&amp;fly=<%=fly%>&amp;bem=nej','','width=' + 260 + ',height=' + 110 + ',top=' + (screen.availHeight-110)/2 + ',left=' + (screen.availWidth-260)/2); return false;"><%=rs("S_plan_dato")%>
                <%    else
                        Do Until rs2.Eof
                            if rs2("Bstel") = fly then
                                bem = rs2("BEM")
                            end if%>
                        <td id="<%=tdtal%>.2" nowrap class="tdbgcolor" height="18px" valign="baseline"><a href="" onclick="parent.open('default.asp?mode=edit&amp;id=<%=rs("MOCid")%>&amp;hvad=S_plan_dato&amp;fly=<%=fly%>','','width=' + 260 + ',height=' + 110 + ',top=' + (screen.availHeight-110)/2 + ',left=' + (screen.availWidth-260)/2); return false;" style="color:#000000 "><%=rs("S_plan_dato")%>&nbsp;</a><img src="gfx/kommentar.gif" border="0" onMouseOver="return overlib('<%=bem%>', FGCOLOR, '#D4D0C8', BGCOLOR, '#000000', CAPTION, '<%=fly%>', CAPCOLOR, '#FFFFFF', WIDTH, 200);" onmouseout="return nd();">
                <%    rs2.Movenext
                        Loop
                        end if %>
                        </td>


efterfulgt af 35 andre varianter af ovenstående...

Disse varianter har jeg tænkt på om kunne skrive klogere, men er ikke nået dertil endnu, men nogen har et bud... :)
Avatar billede mskjoldp Novice
26. december 2004 - 00:59 #13
kan BubbleSort arrFileList, bruges som ORDER BY ?
Avatar billede thesurfer Nybegynder
26. december 2004 - 10:44 #14
"35 andre varianter": Hvad er det, der gentager sig 35 gange?

"ORDER BY": Det ved jeg ikke.. er ikke så meget ind i sorteringsalgoritmer..
Avatar billede tjaz Nybegynder
27. december 2004 - 05:11 #15
(Skal lige sige at jeg ikke har testet efterfølgende forslag)

Men hvis datoen gemmes i forskellige bokse dvs en dag, mdr, aar skulle det så ikke være muligt at sortere dem i SQL'en:

"SELECT * FROM fly_status ORDER BY aar, mdr, dag"

Umiddelbart ville jeg mene det gav følgende resultat:

06-12-2004
06-12-2004
07-12-2004
14-12-2004
22-12-2004
22-12-2004
07-01-2005
Avatar billede tjaz Nybegynder
27. december 2004 - 05:27 #16
Testede lige... :

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")

set fly = Conn.Execute("SELECT * FROM fly_status ORDER BY aar, mdr, dag")
do until fly.eof
if fly("dag") < 10 then
dag = "0"& fly("dag")
else
dag = fly("dag")
end if
if fly("mdr") < 10 then
mdr = "0"& fly("mdr")
else
mdr = fly("mdr")
end if
response.write dag &"-"& mdr &"-"& fly("aar") &"<br>"
fly.movenext
loop
%>

Udskriver:

06-12-2004
06-12-2004
07-12-2004
14-12-2004
22-12-2004
22-12-2004
07-01-2005
Avatar billede mskjoldp Novice
27. december 2004 - 11:33 #17
yep det gentager sig 35 gange.

der 69 rækker i db'en hvor rs. loop'er 35 gange pr række, og i hver loop er der en rs2. der tjekker for bemærkninger.

Det lyder for mig ikke som en god ide af oprette et felt for dag, måned og år. Der må være en bedre mulighed for at sortere dato.

Jeg har fundet ud af at sortere dato. Se 26/12-2004 00:39:31.

Men jeg skal have det implementret i min nuværende kode. Det har jeg brug for hjælp til. Jeg vil gerne smide al koden her... hvis det ønskes. Den er lang.
Avatar billede tjaz Nybegynder
27. december 2004 - 13:10 #18
Er dit datofelt i databasen ikke et "dato og klokkeslet"?
Avatar billede mskjoldp Novice
27. december 2004 - 13:18 #19
nej, hvis det var det var der ingen problemer med at sortere...
Avatar billede mskjoldp Novice
27. december 2004 - 13:19 #20
det er et tekst felt der fx skal kunne indeholde en dato fx 17-12-2004 hvilket der så skal kunne sorteres på.
Avatar billede thesurfer Nybegynder
28. december 2004 - 00:07 #21
27/12-2004 13:18:01 som svar på 27/12-2004 13:10:49... hvad er problemet? :-)

Skal feltet indeholdet *andet* end en dato? Hvis ikke, lav det om til et "dato og klokkeslet".. (jeg kan ikke se problemet?)
Avatar billede mskjoldp Novice
28. december 2004 - 06:34 #22
-> thesurfer
det er ikke et datofelt fordi det skal kunne indeholde andet en en dato. Derfor problemet. Som skrevet i 27/12-2004 13:19:05 så skriver jeg: "et tekst felt der fx skal kunne indeholde en dato" ;)

Hvis det ikke skulle indeholde andet, så: 27/12-2004 13:18:01
Avatar billede mskjoldp Novice
10. februar 2005 - 10:19 #23
lukker uden at have fundet en endelig løsning...
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