Wie sortiere ich Zeilen in Notepad ++ in numerischer Reihenfolge?

4

Verwenden von Notepad ++ v6.6.8 mit TextFX.

Wie sortiere ich Zeilen in numerischer Reihenfolge anstatt in alphanumerischer?

Das heißt, ich möchte, dass Zeilen wie folgt sortiert werden:

1
2
10
11
15
20

nicht:

1
10
11
15
2
20
Nutzer
quelle
Ich bin mir ziemlich sicher, dass es auch nicht ohne Plugin geht. Verwenden Sie TextFX?
Krowe
@ Krowe ja, ich habe TextFX und ich verwendeTextFx->TextFX Tools->Sort lines case insensitive (at column)
Benutzer
Mir ist gerade aufgefallen, dass meine Version veraltet ist. Die Zeilensortierung wurde in 6.5.2 ohne Plugin gemäß den Versionshinweisen
hinzugefügt
@krowe Diese Funktion verwendet keine numerische Reihenfolge.
Crazypotato
@crazypotato Überprüfen Sie unten, ich habe bereits ein Plugin vorgeschlagen, das tut.
Krowe

Antworten:

4

Ich weiß nicht, wie Ihre Datei aussieht, aber ich würde reguläre Ausdrücke verwenden, um Leerzeichen oder Nullen vor jeder Zahl einzufügen, um sie gleich lang zu machen (z. B. 2 wird zu 002). Dann werden sie richtig sortiert und Sie können einen anderen Ersatz verwenden, um die führenden Leerzeichen / Nullen danach zu entfernen.

Dies sind die Schritte (funktioniert für Nummern mit bis zu 10 Zeichen)

Suchen: ^ Ersetzen:0000000000

Suchen: \d*(\d{10}) Ersetzen:\1

Sortieren

Suchen: ^0* Ersetzen:

Es funktioniert durch Hinzufügen von 10 Nullen vor der Zahl, obwohl das wahrscheinlich zu viel ist. Bei der zweiten Ersetzung werden die letzten 10 Ziffern der Zahl verwendet, um alles wieder auf die gleiche Länge zu bringen, sodass Sie Zahlen wie 0000000839, 0000000003 usw. erhalten. Diese werden in der Reihenfolge sortiert, in der sie sortiert werden sollen. Sobald der letzte Ausdruck sortiert ist, werden alle führenden Nullen entfernt, sodass Sie Ihre ursprünglichen Zahlen wieder haben.

Wenn Sie längere Zahlen benötigen, fügen Sie der ersten Ersetzung einfach mehr Nullen hinzu und erhöhen Sie die 10 in der zweiten Ersetzung entsprechend. Wenn Sie dies öfter tun, können Sie mit diesen Schritten ein Makro aufzeichnen.

AVee
quelle
1
Das ist schmerzhaft. Einfachere Verwendung sortvon UnxUpdates.zip sort -n in.txt>out.txt
crazypotato
Für so einfache Dinge sollte das Tool es in einem Schritt schaffen. Wenn Sie mehr Schritte benötigen, verwenden Sie besser ein anderes Werkzeug.
Crazypotato
Ich stimme Ihnen beiden zu, die Frage betraf jedoch speziell Notepad ++. Wenn Sie es in ein Makro aufnehmen, ist es wieder ein Schritt.
AVee
Also wo eigentlich mit Schritten antworten? Ich werde es gerne sehen, weil ich nicht sicher bin, wie ich Regex von der Länge der Zeichenkette abhängig machen kann.
Crazypotato
Ich habe die Schritte hinzugefügt, die ich persönlich verwenden würde, sort -naber wenn dies Teil eines allgemeinen Workflows ist, könnte es sinnvoll sein, ein Makro zu erstellen, um dies zu tun, damit Sie Notepad ++ nicht verlassen müssen
AVee
2

Dies ist jetzt einfach zu erreichen (zumindest in Notepad ++ 7.5.9):

Verwenden Sie den Menüpunkt: Edit -> Line Operations -> Sort Lines As Integers Ascending

(Wenn Sie keinen Text auswählen, wird die gesamte Datei sortiert, und wenn Sie Text auswählen, wird die Sortierung auf den ausgewählten Text beschränkt.)

Nutzer
quelle
1

Ich habe das nicht ausprobiert, aber es gibt ein Plugin, das dies behauptet (solange die Zeilen mit einer Nummer beginnen). Hier ist der Link: http://www.scout-soft.com/linesort/

Update Ok, das Plugin ist anscheinend vorerst weg. Vielleicht funktioniert es nicht mit neueren NP ++ Versionen. Hier ist eine andere, die ich im Plugin-Manager gesehen habe, also ist sie zumindest häufiger: http://william.famille-blum.org/blog/index.php?entry=entry110123-113226

Ich habe es gerade am 6.6.9 ausprobiert und es ist ein wenig umständlich (vergessen Sie nicht, auf die Schaltfläche Hinzufügen im Dialogfeld zu klicken), aber es funktioniert einwandfrei.

krowe
quelle
Das habe ich gesehen; Letztendlich kann ich es versuchen, obwohl ich es vorziehen würde, eine geprüfte Lösung zu verwenden. Das Installieren von zufälligen DLLs, die keinen großen Consenus haben, ist nicht mein Ideal
Benutzer
Eigentlich stellt sich heraus, dass ich nicht glaube, dass die DLL überhaupt herunterladbar ist. Ich bekomme einen 404
User vom
@ Benutzer Siehe mein Update.
Krowe
0

Wählen Sie alles aus und kopieren Sie es als Text in Excel oder ein anderes Tabellenkalkulationsprogramm. Verwenden Sie die benutzerdefinierte Sortierung. Jede Zeile sollte als einzelne Zelle, A1, B1 usw. eingefügt werden. Das Feld muss nur als Ziffer und nicht als Text angegeben werden. Dies erfolgt durch Einstellen des Zellenformats oder mithilfe der TEXT-Funktion. Einfügen in den Merkzettel ++.

In dem komplexeren Fall, dass OP Text mit Zahlen gemischt hat (z. B. "1 Erste Zeile", "12 Zwölfte Zeile"), können wir eine Sortierspalte erstellen, um die Liste zu organisieren. Da es nach der Zahl ein Leerzeichen gibt, können wir mit = LEFT (A1, FIND ("", A1,1)) das Leerzeichen finden, um eine Spalte mit nur den Zahlen zu erstellen. Nachdem Sie die Funktion auf die gesamte Spalte verteilt haben, können Sie beide Spalten anhand der Sortierspaltenreihenfolge (dh der numerischen Reihenfolge) sortieren und dann die erste Spalte wieder in der richtigen Reihenfolge kopieren. Die genaue Formel zum Kopieren der Zeilennummer hängt vom Zeilenformat ab, aber der obige Befehl sollte in den meisten Fällen mit geringfügigen Änderungen funktionieren, da der Stapelaustausch sonst weitere Beispiele für ähnliche Formeln enthält.

J Vook
quelle
1
Wird der in der Frage beschriebene Fehler nicht durch Text verursacht?
Fixer1234
Nein, das Feld muss nur als Ziffer und nicht als Text angegeben werden. Dies erfolgt durch Einstellen des Zellenformats oder mithilfe der TEXT-Funktion. Angenommen, OP enthält Text, der mit Zahlen gemischt ist (z. B. "1 Erste Zeile", "12 Zwölfte Zeile"), können wir eine Sortierspalte erstellen, um die Liste zu organisieren. Da nach der Zahl ein Leerzeichen steht, können wir mit = LEFT (A1, FIND ("", A1,1)) eine Spalte mit nur den Zahlen erstellen. Nachdem Sie die Funktion auf die gesamte Spalte verteilt haben, können Sie beide Spalten anhand der Sortierspaltenreihenfolge (dh der numerischen Reihenfolge) sortieren und dann die erste Spalte wieder in der richtigen Reihenfolge kopieren.
J Vook
1
Ja, das dachte ich auch in meiner ursprünglichen Antwort, aber dann wurde mir klar, dass OP ganze Zeilen sortieren wollte, nicht nur die Zahlen.
J Vook