Español
Foro

Teilstrings sortieren

 

Michael
Wodrich
Um Teilstrings en un String a sortieren nutzte Yo bisher siempre el Umweg encima
  • MoveStrToList (de en el Listbox-Liste)
  • de hay rüber en un sortierte Liste
  • entonces zurück en el Listbox-Liste
  • y letztendlich con MoveListToStr

para deseado Ergebnis.

Das lo auch una wenig kürzer va, zeigt el zweite Versión, el SortArray.inc benötigt. El lege Yo auch en.
KompilierenMarcaSeparación
' (in dieser Version ungeeignet für Zahlen; na ja, fast) Proc Sort_StrPart Parameters StrPart$, Trenner$ Declare Erg$, hListe& If (Len(StrPart$) = 0) or (Len(Trenner$) = 0) Erg$ = StrPart$ Else hListe& = Create("List",1)'sortierte Liste ClearList 0'lösche Listbox-Liste (LBL) MoveStrToList(StrPart$, Trenner$)'Teilstrings in LBL MoveListToHandle(hListe&)'in sortierte Liste ClearList 0 MoveHandleToList(hListe&)'zurück in LBL Erg$ = MoveListToStr$(Trenner$) ClearList 0' LBL sauber hinterlassen DestroyWindow(hListe&) Case Right$(Erg$,Len(Trenner$)) = Trenner$ : Erg$ = Left$(Erg$,Len(Erg$)-Len(Trenner$)) EndIf Return Erg$ EndProc $I SortArray.inc Proc Sort_StrPart2 Parameters StrPart$, Trenner$ Declare Erg$, hListe& If (Len(StrPart$) = 0) or (Len(Trenner$) = 0) Erg$ = StrPart$ Else ClearList 0'lösche Listbox-Liste (LBL) MoveStrToList(StrPart$, Trenner$)'Teilstrings in LBL QuickSort_List 0, 0, (GetCount(0) - 1), 1, 0 Erg$ = MoveListToStr$(Trenner$) ClearList 0' LBL sauber hinterlassen Case Right$(Erg$,Len(Trenner$)) = Trenner$ : Erg$ = Left$(Erg$,Len(Erg$)-Len(Trenner$)) EndIf Return Erg$ EndProc cls Print "Version:",$ProfVer;"\n" Declare Test$ Test$ = "Delta,Bravo,Echo,Charlie,Fuchstritt,Alfa" Print "alt:", Test$ Print "neu:", Sort_StrPart(Test$, ",");"\n" Test$ = "037;081;019;007;012;024;080" Print "alt:", Test$ Print "neu:", Sort_StrPart(Test$, ";");"\n" Test$ = "Delta,Bravo,Echo,Charlie,Fuchstritt,Alfa" Print "(hier wurde der Umweg ausgelassen und die LBL direkt sortiert)" Print "alt:", Test$ Print "neu:", Sort_StrPart2(Test$, ",");"\n" Print "TASTE=Ende" Waia> End

Hier die SortArray.inc
KompilierenMarkierenSeparieren
/*
Array oder Liste (teil-)sortieren
Nicht vergessen: Arrays und Listen haben die Basis Null.
QuickSort_List ist nicht für sortierte Listen gedacht.
Da ich aber häufiger die Listbox-Liste in eine (sortierte)
Liste umgepackt habe und dann das Ganze wieder in die
Gegenrichtung bewegen mußte...
- das A u O um die Listbox-Liste zu sortieren.
- auch sinnvoll, wenn in unsortierten Listen
nur ein Teil der Einträge sortiert werden soll.
*/
' (Teil-)Sortieren von Arrays
' ---------------------------
' QuickSort_Long Long_Array&[], min&, max&
' QuickSort_Str String_Array&[], min&, max&, CaseSense%
'    Wenn CaseSense ungleich Null es, entonces voluntad
'    el Cuerdas como Lower$()-Werte verglichen.
' Teil-Sortieren de Listen
' -------------------------
' QuickSort_List ListHandle&, min&, max&, CaseSense%, IsNum%
'    Wenn ListHandle& = 0, entonces Listbox-Liste.
'    Wenn IsNum ungleich Null es, entonces voluntad
'    el Werte mittels Val() verglichen -- sonst... --
'       Wenn CaseSense ungleich Null es, entonces voluntad
'       el Cuerdas como Lower$()-Werte verglichen.
'=================================================
' (Teil-)Sortieren de Arrays
' ---------------------------
' QuickSort_Long Long_Array&[], min&, max&

Proc QuickSort_Long

    Parámetros Arr&[], Low&, High&
    Declarar i&, j&, hilf&, mitte&
    i& = Low&
    j& = High&
    mitte& = Arr&[@Int((Low& + High&) / 2)]

    Mientras que i& <= j&

        Mientras que Arr&[i&] < mitte&

            Inc i&

        EndWhile

        Mientras que Arr&[j&] > mitte&

            Dec j&

        EndWhile

        If i& <= j&

            hilf& = Arr&[i&]
            Arr&[i&] = Arr&[j&]
            Arr&[j&] = hilf&
            Inc i&
            Dec j&

        EndIf

    EndWhile

    If Low& < j&

        QuickSort_Long Arr&[], Low&, j&

    EndIf

    If i& < High&

        QuickSort_Long Arr&[], i&, High&

    EndIf

ENDPROC

' (Teil-)Sortieren de Arrays
' ---------------------------
' QuickSort_Str String_Array&[], min&, max&, CaseSense%
'    Wenn CaseSense ungleich Null es, entonces voluntad
'    el Cuerdas como Lower$()-Werte verglichen.

Proc QuickSort_Str

    Parámetros Arr$[], Low&, High&, CaseSense%
    Declarar i&, j&, hilf$, mitte$

    Proc QS_GetStr$

        Parámetros Valor$
        Volver If( CaseSense% <> 0, Lower$(Valor$), Valor$ )

    ENDPROC

    i& = Low&
    j& = High&
    mitte$ = QS_GetStr$(Arr$[@Int((Low& + High&) / 2)])

    Mientras que i& <= j&

        Mientras que QS_GetStr$(Arr$[i&]) < mitte$

            Inc i&

        EndWhile

        Mientras que QS_GetStr$(Arr$[j&]) > mitte$

            Dec j&

        EndWhile

        If i& <= j&

            hilf$ = Arr$[i&]
            Arr$[i&] = Arr$[j&]
            Arr$[j&] = hilf$
            Inc i&
            Dec j&

        EndIf

    EndWhile

    If Low& < j&

        QuickSort_Str Arr$[], Low&, j&, CaseSense%

    EndIf

    If i& < High&

        QuickSort_Str Arr$[], i&, High&, CaseSense%

    EndIf

ENDPROC

' Teil-Sortieren de Listen
' -------------------------
' QuickSort_List ListHandle&, min&, max&, CaseSense%, IsNum%
'    Wenn ListHandle& = 0, entonces Listbox-Liste.
'    Wenn IsNum ungleich Null es, entonces voluntad
'    el Werte mittels Val() verglichen -- sonst... --
'       Wenn CaseSense ungleich Null es, entonces voluntad
'       el Cuerdas como Lower$()-Werte verglichen.

Proc QuickSort_List

    Parámetros ListHandle&, Low&, High&, CaseSense%, IsNum%
    Declarar i&, j&, hilfS$, mitteS$, hilfL&, mitteL&, tmp$

    Proc QS_Get

        Parámetros Idx&, Ori%

        If Ori%

            Volver GetString$(ListHandle&, Idx&)

        Más

            If IsNum%

                Volver Val(GetString$(ListHandle&, Idx&))

            Más

                ' todavía una Sortiertrick - el Umlaute umsetzen
                tmp$ = GetString$(ListHandle&, Idx&)
                tmp$ = Translate$(tmp$,"Ä","Ae")
                tmp$ = Translate$(tmp$,"Ö","Oe")
                tmp$ = Translate$(tmp$,"Ü","Ue")
                tmp$ = Translate$(tmp$,"ä","ae")
                tmp$ = Translate$(tmp$,"ö","oe")
                tmp$ = Translate$(tmp$,"ü","ue")
                tmp$ = Translate$(tmp$,"ß","ss")
                Volver If( CaseSense% <> 0, Lower$(tmp$), tmp$ )

            EndIf

        EndIf

    ENDPROC

    Proc QS_Put

        Parámetros Idx&, Valor$
        ReplaceString(ListHandle&, Idx&, Valor$)

    ENDPROC

    i& = Low&
    j& = High&

    If IsNum%

        mitteL& = QS_Get(@Int((Low& + High&) / 2), 0)

    Más

        mitteS$ = QS_Get(@Int((Low& + High&) / 2), 0)

    EndIf

    Mientras que i& <= j&

        If IsNum%

            Mientras que QS_Get(i&,0) < mitteL&

                Inc i&

            EndWhile

            Mientras que QS_Get(j&,0) > mitteL&

                Dec j&

            EndWhile

        Más

            Mientras que QS_Get(i&,0) < mitteS$

                Inc i&

            EndWhile

            Mientras que QS_Get(j&,0) > mitteS$

                Dec j&

            EndWhile

        EndIf

        If i& <= j&

            hilfS$ = QS_Get(i&,1)
            QS_Put(i&, QS_Get(j&,1))
            QS_Put(j&, hilfS$)
            Inc i&
            Dec j&

        EndIf

    EndWhile

    If Low& < j&

        QuickSort_List ListHandle&, Low&, j&, CaseSense%, IsNum%

    EndIf

    If i& < High&

        QuickSort_List ListHandle&, i&, High&, CaseSense%, IsNum%

    EndIf

ENDPROC


Saludo
Michael Wodrich
 
XProfan X2
Windows (TM) Vista Ultimate, Core(TM) i7 920 @ 2.67GHz, 9206,26 MB

Programmieren, das spannendste Detektivspiel der Welt.
11.03.2014  
 




p.specht

Vielen Dank, klappt bien!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
17.03.2014  
 



¿Por qué postest Usted el no bajo Incluye? Dann würden ellos auch mejor gefunden y Su Perfil entsprechend automáticamente erweitert.
 
09.07.2014  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

4.651 Views

Untitledvor 0 min.
H.Brill03.12.2022
RudiB.26.04.2022
kustg02.03.2020
Walter07.06.2019
Más...

Themeninformationen

Dieses Thema ha 3 subscriber:

iF (1x)
p.specht (1x)
Michael Wodrich (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie