Français
Forum

Teilstrings sortieren

 

Michael
Wodrich
Um Teilstrings dans einem String trop sortieren nutzte je bisher toujours den le détour sur
  • MoveStrToList (ab dans qui Listbox-liste)
  • de là rüber dans un sortierte liste
  • ensuite zurück dans qui Listbox-liste
  • et letztendlich avec MoveListToStr

zum gewünschten Ergebnis.

cela es aussi un peu kürzer allez, zeigt qui zweite Version, qui SortArray.inc nécessaire. qui lege je aussi chez.
KompilierenMarqueSéparation
' (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%
'    si CaseSense ungleich zéro ist, ensuite volonté
'    qui Cordes comme Lower$()-Werte verglichen.
' partie-Sortieren de Listen
' -------------------------
' QuickSort_List ListHandle&, min&, max&, CaseSense%, IsNum%
'    si ListHandle& = 0, ensuite Listbox-liste.
'    si IsNum ungleich zéro ist, ensuite volonté
'    qui Werte mittels Val() verglichen -- sonst... --
'       si CaseSense ungleich zéro ist, ensuite volonté
'       qui Cordes comme Lower$()-Werte verglichen.
'=================================================
' (partie-)Sortieren de Arrays
' ---------------------------
' QuickSort_Long Long_Array&[], min&, max&

Proc QuickSort_Long

    Paramètres Arr&[], Low&, High&
    Déclarer i&, j&, hilf&, mitte&
    i& = Low&
    j& = High&
    mitte& = Arr&[@Int((Low& + High&) / 2)]

    Tandis que i& <= j&

        Tandis que Arr&[i&] < mitte&

            Inc i&

        Endwhile

        Tandis que Arr&[j&] > mitte&

            Décembre j&

        Endwhile

        Si i& <= j&

            hilf& = Arr&[i&]
            Arr&[i&] = Arr&[j&]
            Arr&[j&] = hilf&
            Inc i&
            Décembre j&

        EndIf

    Endwhile

    Si Low& < j&

        QuickSort_Long Arr&[], Low&, j&

    EndIf

    Si i& < High&

        QuickSort_Long Arr&[], i&, High&

    EndIf

ENDPROC

' (partie-)Sortieren de Arrays
' ---------------------------
' QuickSort_Str String_Array&[], min&, max&, CaseSense%
'    si CaseSense ungleich zéro ist, ensuite volonté
'    qui Cordes comme Lower$()-Werte verglichen.

Proc QuickSort_Str

    Paramètres Arr$[], Low&, High&, CaseSense%
    Déclarer i&, j&, hilf$, mitte$

    Proc QS_GetStr$

        Paramètres Wert$
        Retour Si( CaseSense% <> 0, Lower$(Wert$), Wert$ )

    ENDPROC

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

    Tandis que i& <= j&

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

            Inc i&

        Endwhile

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

            Décembre j&

        Endwhile

        Si i& <= j&

            hilf$ = Arr$[i&]
            Arr$[i&] = Arr$[j&]
            Arr$[j&] = hilf$
            Inc i&
            Décembre j&

        EndIf

    Endwhile

    Si Low& < j&

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

    EndIf

    Si i& < High&

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

    EndIf

ENDPROC

' partie-Sortieren de Listen
' -------------------------
' QuickSort_List ListHandle&, min&, max&, CaseSense%, IsNum%
'    si ListHandle& = 0, ensuite Listbox-liste.
'    si IsNum ungleich zéro ist, ensuite volonté
'    qui Werte mittels Val() verglichen -- sonst... --
'       si CaseSense ungleich zéro ist, ensuite volonté
'       qui Cordes comme Lower$()-Werte verglichen.

Proc QuickSort_List

    Paramètres ListHandle&, Low&, High&, CaseSense%, IsNum%
    Déclarer i&, j&, hilfS$, mitteS$, hilfL&, mitteL&, tmp$

    Proc QS_Get

        Paramètres Idx&, Ori%

        Si Ori%

            Retour GetString$(ListHandle&, Idx&)

        D'autre

            Si IsNum%

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

            D'autre

                ' encore un Sortiertrick - qui 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")
                Retour Si( CaseSense% <> 0, Lower$(tmp$), tmp$ )

            EndIf

        EndIf

    ENDPROC

    Proc QS_Put

        Paramètres Idx&, Wert$
        ReplaceString(ListHandle&, Idx&, Wert$)

    ENDPROC

    i& = Low&
    j& = High&

    Si IsNum%

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

    D'autre

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

    EndIf

    Tandis que i& <= j&

        Si IsNum%

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

                Inc i&

            Endwhile

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

                Décembre j&

            Endwhile

        D'autre

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

                Inc i&

            Endwhile

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

                Décembre j&

            Endwhile

        EndIf

        Si i& <= j&

            hilfS$ = QS_Get(i&,1)
            QS_Put(i&, QS_Get(j&,1))
            QS_Put(j&, hilfS$)
            Inc i&
            Décembre j&

        EndIf

    Endwhile

    Si Low& < j&

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

    EndIf

    Si i& < High&

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

    EndIf

ENDPROC


Salut
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  
 



pourquoi postest Du qui pas sous Comprend? ensuite würden vous aussi besser trouvé et Dein Profil entsprechend automatisch erweitert.
 
09.07.2014  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

4.842 Views

Untitledvor 0 min.
H.Brill03.12.2022
RudiB.26.04.2022
kustg02.03.2020
Walter07.06.2019
plus...

Themeninformationen

cet Thema hat 3 participant:

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


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie