Comment trier les lignes par ordre numérique dans Notepad ++?

3

Utilisation de Notepad ++ v6.6.8 avec TextFX.

Comment trier les lignes par ordre numérique plutôt que alphanumérique?

C'est-à-dire que je veux que les lignes se trient comme suit:

1
2
10
11
15
20

ne pas:

1
10
11
15
2
20
User
la source
Je suis à peu près sûr que ça ne va pas non plus sans plugin. Utilisez-vous TextFX?
krowe
@krowe oui j'ai TextFX et j'utilise TextFx->TextFX Tools->Sort lines case insensitive (at column)
User
Je viens de remarquer que ma version est dépassée. Le tri en ligne a été ajouté à 6.5.2 sans plugin conformément aux notes de version: notepad-plus-plus.org/news/notepad-6.5.2-release.html
krowe
@ Krowe Cette fonctionnalité en utilisant un ordre non numérique.
crazypotato
@ crazypotato Vérifiez ci-dessous, j'ai déjà suggéré un plugin qui le fait.
krowe

Réponses:

5

Je ne sais pas à quoi ressemble votre fichier, mais j'utiliserais des expressions régulières pour ajouter des espaces ou des zéros avant chaque nombre et leur donner la même longueur (par exemple, 2 devient 002). Ensuite, ils seront triés correctement et vous pouvez utiliser un autre remplacement pour supprimer les espaces / zéros qui le précèdent.

Ce sont les étapes (fonctionne pour le nombre jusqu'à 10 caractères)

Trouver: ^ Remplacer: 0000000000

Trouver: \d*(\d{10}) Remplacer: \1

Trier

Trouver: ^0* Remplacer:

Cela fonctionne en ajoutant 10 zéros avant le nombre, même si c'est probablement trop. Le deuxième remplacement prend les 10 derniers chiffres du numéro pour ramener le tout à la même longueur, en vous donnant des chiffres tels que 0000000839, 0000000003, etc. Ceux-ci seront triés dans l'ordre que vous souhaitez qu'ils trient. Une fois la dernière expression triée, tous les zéros seront supprimés, ce qui vous permettra de retrouver vos numéros d'origine.

Si vous avez besoin de numéros plus longs, ajoutez simplement plus de zéros au premier remplacement et augmentez le 10 du deuxième remplacement en conséquence. Si vous faites cela plus souvent, vous pouvez enregistrer une macro avec ces étapes.

AVee
la source
1
C'est pénible. Utilisation plus facile sort de UnxUpdates.zip sort -n in.txt>out.txt
crazypotato
Pour de telles choses simples, cet outil devrait le faire en une étape. Si besoin plus d'étapes alors mieux utiliser un autre outil.
crazypotato
Je suis d'accord avec vous deux, la question portait spécifiquement sur Notepad ++. Et l'enregistrement dans une macro en fera une étape supplémentaire.
AVee
Alors, où la réponse réelle avec des étapes? J'aimerai le voir parce que je ne sais pas comment je peux faire que les regex dépendent de la longueur de la chaîne.
crazypotato
J'ai ajouté les étapes, personnellement, j'utiliserais sort -n mais si cela fait partie d'un flux de travail commun, il peut être judicieux de créer une macro pour le faire afin de ne pas avoir à quitter Notepad ++.
AVee
1

Je n'ai pas essayé cela, mais il y a un plugin qui prétend le faire (tant que les lignes commencent avec un numéro). Voici le lien: http://www.scout-soft.com/linesort/

Mettre à jour Ok, ce plugin est apparemment parti pour le moment. Peut-être que cela ne fonctionne pas avec les nouvelles versions de NP ++. Voici un autre exemple que j'ai vu dans le gestionnaire de plugins, il est donc au moins plus courant: http://william.famille-blum.org/blog/index.php?entry=entry110123-113226

Je viens de l'essayer sur 6.6.9 et c'est un peu gênant (n'oubliez pas d'appuyer sur le bouton Ajouter de la boîte de dialogue) mais fonctionne parfaitement bien.

krowe
la source
J'ai vu ça; en fin de compte, je peux l'essayer bien que je préfère utiliser une solution validée. L'installation de DLL aléatoires sans grande consommation n'est pas mon idéal
User
En fait, je ne pense pas que la DLL est téléchargeable, je reçois un 404
User
@User Voir ma mise à jour.
krowe
1

Sélectionnez tout et copiez-le sous forme de texte dans Excel ou un autre tableur. Utilisez le tri personnalisé. Chaque ligne doit être collée sous forme de cellule unique, A1, B1, etc. Il suffit de définir le champ comme étant un nombre et non du texte. Ceci est fait en définissant le format de cellule ou en utilisant la fonction TEXT. Collez de nouveau dans le bloc-notes ++.

Dans le cas plus complexe où OP contient du texte mélangé à des chiffres (par exemple, "1 première ligne", "12 douzième ligne"), nous pouvons créer une colonne de tri pour organiser la liste. Puisqu'il y a un espace après le nombre, nous pouvons trouver cet espace pour créer une colonne contenant uniquement les nombres avec = LEFT (A1, FIND ("", A1,1)). Après avoir réparti la fonction sur toute la colonne, nous pouvons trier les deux colonnes en fonction de leur ordre de tri (ordre numérique, par exemple), puis copier la première colonne dans le bon ordre. La formule exacte pour extraire le numéro de ligne dépend du format de la ligne, mais la commande ci-dessus doit fonctionner avec des modifications mineures dans la plupart des cas, sinon l'échange de pile contient d'autres exemples de formules similaires.

J Vook
la source
1
Le texte ne va-t-il pas créer le problème décrit dans la question?
fixer1234
Non, il suffit de définir le champ sous la forme numérique et non textuelle. Ceci est fait en définissant le format de cellule ou en utilisant la fonction TEXT. En supposant que le texte de OP soit mélangé à des chiffres (par exemple, "1 première ligne", "12 douzième ligne"), nous pouvons créer une colonne de tri pour organiser la liste. Puisqu'il y a un espace après le nombre, nous pouvons trouver que pour créer une colonne avec seulement les nombres utilisant = LEFT (A1, FIND ("", A1,1)). Après avoir réparti la fonction sur toute la colonne, nous pouvons trier les deux colonnes en fonction de leur ordre de tri (ordre numérique, par exemple), puis copier la première colonne dans le bon ordre.
J Vook
1
Oui, je le pensais aussi dans ma réponse initiale, mais j'ai alors réalisé que OP demandait de trier des lignes entières, pas seulement les chiffres.
J Vook
1

Ceci est maintenant facile à réaliser (au moins dans Notepad ++ 7.5.9):

Utilisez l'élément de menu: Edit -> Line Operations -> Sort Lines As Integers Ascending

(Remarque: si vous ne sélectionnez aucun texte, le fichier entier sera trié. Si vous sélectionnez du texte, le tri est limité au texte sélectionné.)

User
la source
Vous devriez marquer ceci comme accepté.
Toto
-2

Module de tri des colonnes

http://william.famille-blum.org/software/nppcolumnsort/NppColumnSort-1.0.0.2.zip

Vous devez spécifier la colonne de départ pour les nombres (généralement 1, la première) et la longueur à comparer (nombre maximum de chiffres). Puis définissez l'ordre de tri "croissant" et le type de comparaison "numérique".

user3177026
la source
Bienvenue dans SU, au lieu de pointer sur un fichier .zip à télécharger, vous pouvez citer les informations pertinentes de ce site et fournir un lien avec une référence au texte cité.
Francisco Tapia