Sort

Sortiert den Inhalt einer Variable in alphabetischer, numerischer oder zufälliger Reihenfolge (entfernt optional Duplikate).

Sort, VarName , Optionen

Parameter

VarName

Name der Variable, deren Inhalt sortiert werden soll. Dieser Parameter kann kein Ausdruck sein.

Optionen

Wenn leer oder weggelassen, wird der Inhalt in aufsteigender alphabetischer Reihenfolge sortiert (Groß-/Kleinschreibung-sensitiv), wobei ein Zeilenvorschub (`n) als Trennzeichen verwendet wird. Andernfalls geben Sie eine Zeichenkette an, die aus einer oder mehreren der unten aufgeführten Optionen besteht (in beliebiger Reihenfolge, optional durch Leerzeichen getrennt):

Optionen

C: Groß-/Kleinschreibung-sensitive Sortierung (wird ignoriert, wenn die N-Option vorhanden ist). Wenn sowohl C als auch CL weggelassen werden, werden die Großbuchstaben A bis Z und die entsprechenden Kleinbuchstaben bei der Sortierung als identisch betrachtet.

CL [v1.0.43.03+]: Nicht-Groß-/Kleinschreibung-sensitive Sortierung gemäß den aktuellen Sprach- und Regionseinstellungen des Benutzers. Zum Beispiel behandeln die meisten englischen und westeuropäischen Sprach- und Regionseinstellungen die Großbuchstaben A bis Z, einschließlich ANSI-Großbuchstaben wie Ä und Ü, und die entsprechenden Kleinbuchstaben als identisch. Diese Methode verwendet auch eine "Wortsortierung", die Bindestriche und Apostrophe so behandelt, dass Wörter wie "coop" und "co-op" zusammenbleiben. Je nach Inhalt der zu sortierenden Elemente ist die Performanz 1- bis 8-mal schlechter als die Standardmethode der Nichtsensitivität.

Dx: Geben Sie für x ein Trennzeichen an, das den Anfang und das Ende pro Element in VarName bestimmt. Das Trennzeichen ist immer Groß-/Kleinschreibung-sensitiv. Wenn diese Option nicht verwendet wird, ist x standardmäßig ein Zeilenvorschub (`n). In den meisten Fällen funktioniert das auch, wenn Zeilen mit einem Wagenrücklauf-Zeilenvorschub-Paar (`r`n) enden, allerdings wird der Wagenrücklauf (`r) in die Vergleiche einbezogen, was Einfluss auf die Sortierreihenfolge hat. Zum Beispiel wird B`r`nA wie erwartet sortiert, aber A`r`nA`t`r`nB platziert A`t`r vor A`r.

F MeineFunktion [v1.0.47+]: Ermöglicht eine benutzerdefinierte Sortierung nach den Kriterien in MeineFunktion (allerdings dauert diese Sortierung wesentlich länger). Geben Sie den Buchstaben F an, gefolgt von beliebig vielen Leer-/Tabulatorzeichen, gefolgt vom Namen einer Funktion, die verwendet werden soll, um zwei beliebige Elemente in der Liste zu vergleichen. Die Funktion muss zwei oder drei Parameter akzeptieren. Wenn die Funktion den ersten Parameter für größer als den zweiten hält, muss sie einen positiven Integer zurückgeben. Wenn die Funktion beide Parameter als gleich betrachtet, muss sie 0, "" oder nichts zurückgeben. Andernfalls muss sie einen negativen Integer zurückgeben. Wenn der Rückgabewert einen Dezimalpunkt enthält, wird dieser Teil ignoriert (d.h. 0.8 ist dasselbe wie 0). Der dritte Parameter (falls vorhanden) empfängt den Offset (in Zeichen) des zweiten Elements relativ zum ersten Element in der ursprünglichen/unsortierten Liste (siehe Beispiele). Die Funktion verwendet die gleichen globalen Einstellungen (z.B. StringCaseSense) wie der Sort-Befehl, der sie aufgerufen hat.

Hinweis: Die F-Option bewirkt, dass alle anderen Optionen außer D, Z und U ignoriert werden (allerdings haben N, C und CL weiterhin Einfluss darauf, wie Duplikate erkannt werden). Außerdem erfolgt keine Sortierung, wenn die angegebene Funktion: 1) nicht existiert; 2) weniger als zwei Parameter akzeptiert; oder 3) der erste oder zweite Parameter ByRef ist.

N: Numerische Sortierung. Jedes Element wird als Zahl statt als Zeichenkette vermutet (wenn z.B. diese Option nicht verwendet wird, hat dies zur Folge, dass die Zeichenkette 233 wegen der alphabetischen Anordnung kleiner ist als Zeichenkette 40). Sowohl dezimale als auch hexadezimale Zeichenketten (z.B. 0xF1) werden als numerisch betrachtet. Zeichenketten, die nicht mit einer Zahl beginnen, werden beim Sortieren als 0 betrachtet. Zahlen werden als 64-Bit-Floating-Point-Werte behandelt, d.h. der Nachkommabereich jeder Zahl (falls vorhanden) wird berücksichtigt.

Pn: Sortiert Elemente gemäß der Zeichenposition n (verwenden Sie keine Hexadezimalzahlen für n). Wenn diese Option nicht verwendet wird, ist n standardmäßig 1 (die Position des ersten Zeichens). Die Sortierung vergleicht jede Zeichenkette mit den anderen, beginnend beim ihrem n-ten Zeichen. Wenn n größer als die Länge der Zeichenkette ist, wird die Zeichenkette beim Sortieren als leer betrachtet. Wenn diese Option mit der N-Option (numerische Sortierung) verwendet wird, wird die Zeichenposition der Zeichenkette verwendet, die nicht notwendigerweise mit der Ziffernposition der Zahl übereinstimmt.

R: Sortiert in umgekehrter Reihenfolge (alphabetisch oder numerisch, abhängig von den anderen Optionen).

Random: Sortiert in zufälliger Reihenfolge. Diese Option bewirkt, dass alle anderen Optionen außer D, Z und U ignoriert werden (allerdings haben N, C und CL weiterhin Einfluss darauf, wie Duplikate erkannt werden). Beispiele:

Sort, MeineVar, Random
Sort, MeineVar, Random Z D|

U: Entfernt doppelte Elemente aus der Liste, um jedes Element einzigartig zu machen. ErrorLevel wird auf die Anzahl der entfernten Elemente gesetzt (andernfalls 0). Wenn die C-Option aktiv ist, muss die Groß-/Kleinschreibung der Elemente übereinstimmen, damit sie als identisch betrachtet werden. Wenn die N-Option aktiv ist, wird ein Element wie z.B. 2 als Duplikat von 2.0 betrachtet. Wenn die P- oder \-Option aktiv ist, muss das gesamte Element ein Duplikat sein, nicht nur die Teilzeichenkette, die für die Sortierung verwendet wird. Wenn die Random- oder F-Option aktiv ist, werden Duplikate nur entfernt, wenn sie nach der Sortierung direkt aneinander angrenzen. Wenn z.B. A|B|A zufällig sortiert wird, kann das Ergebnis entweder ein oder zwei A enthalten.

Z: Um diese Option zu verstehen, nehmen wir als Beispiel eine Variable, die ROT`nGRÜN`nBLAU`n enthält. Wenn die Z-Option nicht verwendet wird, wird der letzte Zeilenvorschub (`n) als Teil des letzten Elements betrachtet, folglich sind es nur 3 Elemente. Wenn aber Z verwendet wird, wird das letzte `n (falls vorhanden) als Trennzeichen betrachtet, folglich sind es 4 Elemente und das letzte Element ist leer.

\: Sortiert Elemente gemäß der Teilzeichenkette hinter dem letzten umgekehrten Schrägstrich. Wenn das Element keinen umgekehrten Schrägstrich hat, wird das gesamte Element als Teilzeichenkette betrachtet. Diese Option ist nützlich, um Dateinamen unabhängig von ihrem Pfad zu sortieren, wie im folgenden Beispiel, wo die Zeile AAA.txt oberhalb der Zeile BBB.txt eingeordnet wurde, da ihre Verzeichnisse bei der Sortierung ignoriert wurden:

C:\BBB\AAA.txt
C:\AAA\BBB.txt

Hinweis: Die Optionen N und P werden ignoriert, wenn die \-Option vorhanden ist.

Bemerkungen

Dieser Befehl wird normalerweise verwendet, um eine Variable zu sortieren, die eine Liste von Zeilen enthält, wobei jede Zeile mit einem Zeilenvorschubzeichen (`n) endet. Um eine Liste von Zeilen in eine Variable zu bekommen, kann z.B. FileRead verwendet werden, das den gesamten Inhalt einer Datei lädt.

Wenn es sich bei dem Variablennamen um Clipboard handelt und die Zwischenablage Dateien enthält (die z.B. aus einem geöffneten Explorer-Fenster kopiert wurden), werden diese Dateien mit einer sortierten Liste von Dateinamen ersetzt. Mit anderen Worten, die Zwischenablage enthält nach dieser Operation nicht mehr die Dateien selbst.

ErrorLevel wird durch diesen Befehl nur geändert, wenn die U-Option aktiv ist.

Die maximale Kapazität einer Variable kann mit #MaxMem erhöht werden.

Wenn eine große Variable sortiert wurde und ihr Inhalt später nicht mehr benötigt wird, kann sie leer gemacht werden, um ihr Speicher freizugeben, z.B. MeineVar := "".

FileRead, dateilesende Schleife, parsende Schleife, StrSplit(), RegisterCallback(), Clipboard, #MaxMem, StringSplit

Beispiele

Sortiert eine kommagetrennte Liste von Zahlen.

MeineVar := "5,3,7,9,1,13,999,-4"
Sort MeineVar, N D,  ; Numerisch sortieren und Komma als Trennzeichen verwenden.
MsgBox %MeineVar%   ; Das Ergebnis ist -4,1,3,5,7,9,13,999

Sortiert den Inhalt einer Datei.

FileRead, Inhalt, C:\Adressliste.txt
if not ErrorLevel  ; Erfolgreich geladen.
{
    Sort, Inhalt
    FileDelete, C:\Adressliste (alphabetisch).txt
    FileAppend, %Inhalt%, C:\Adressliste (alphabetisch).txt
    Inhalt := ""  ; Speicher freigeben.
}

Erstellt einen Hotkey, der gedrückt werden kann, um Dateien in einem Explorer-Fenster zu kopieren, ihre Dateinamen zu sortieren und die sortierte Liste in die Zwischenablage einzufügen.

#c:: ; WIN+C
Clipboard := "" ; Muss leer sein, damit die Erkennung funktioniert.
Send ^c
ClipWait 2
if ErrorLevel
    return
Sort Clipboard
MsgBox Bereit zum Einfügen:`n%Clipboard%
return

Zeigt die benutzerdefinierte Sortierung mit einer Rückruffunktion.

MeineVar := "def`nabc`nmno`nFGH`nco-op`ncoop`ncop`ncon`n"
Sort, MeineVar, F StringSort
StringSort(a1, a2)
{
    return a1 > a2 ? 1 : a1 < a2 ? -1 : 0  ; Sortiert alphabetisch, gemäß der Einstellung von StringCaseSense.
}

MeineVar := "5,3,7,9,1,13,999,-4"
Sort, MeineVar, F IntegerSort D,
IntegerSort(a1, a2)
{
    return a1 - a2  ; Sortiert in aufsteigender numerischer Reihenfolge. Diese Methode funktioniert nur, wenn die Differenz einen vorzeichenfähigen 64-Bit-Integer nicht überschreiten kann.
}

MeineVar := "1,2,3,4"
Sort, MeineVar, F UmgekehrteRichtung D,  ; Kehrt die Liste um, so dass sie 4,3,2,1 enthält.
UmgekehrteRichtung(a1, a2, offset)
{
    return offset  ; Offset ist positiv, wenn in der originalen Liste a2 nach a1 kommt, andernfalls negativ.
}