Pour trier des données on a la commande SORT.EXE mais malheureusement elle n'effectue que le trie alphabétique:
Salut,
Pour trier des données on a la commande SORT.EXE mais malheureusement elle n'effectue que le trie alphabétique:
un autre exemple:
jusqu'ici tout marche à la perfection, voyons maintenant cette exemple:
comme vous voyez la commande SORT.EXE ne connait pas le trie numérique.
pour contourner ce problème, on peux utiliser la commande externe "gnu sort" avec l'option "-n"
une autre solution est de faire un script émulant la commande "gnusort -n".
Donc l'une des solution possible est de fixer la longueur des chaine de caractères pour qu'il aillent la même longueur, pour se faire on va ajouter des zero "0" à gauche de chaque chaine:
ensuite on va les passer à la commande SORT.EXE
c:\> Sort fichier4.txt
le trie est effectuer avec succès il nous ne reste plus qu'a enlever les zeros "0" de plus.
et voilà voyons notre script de quoi aura l'air:
comme vous voyez c'est le bordel !! On essayera alors une autre solution,...que dites-vous de
comparer les nombres, nombre par nombre en décalant chaque chiffre de gauche à droite, le plus grand nombre sera décalé à droite et le plus petit à gauche ? un SORT à bulle...quoi..
c'est plus simple..non.. :)
Salut,
Pour trier des données on a la commande SORT.EXE mais malheureusement elle n'effectue que le trie alphabétique:
c:\> type fichier1.txt 1 marcoc 2 libye 3 palestine 4 france c:\> sort /r /+2 fichier1.txt /o trier.txt c:\> type trier.txt 3 palestine 1 maroc 2 libye 4 france
un autre exemple:
c:\> type fichier2.txt 5 3 6 1 c:\> sort fichier2.txt 1 3 5 6
jusqu'ici tout marche à la perfection, voyons maintenant cette exemple:
c:\> type fichier3.txt 65 1 26894 1125 369 c:\> sort fichier3.txt 1 1125 26894 369 65
comme vous voyez la commande SORT.EXE ne connait pas le trie numérique.
pour contourner ce problème, on peux utiliser la commande externe "gnu sort" avec l'option "-n"
c:\> gnusort -n fichier3.txt 1 65 369 1125 26894
une autre solution est de faire un script émulant la commande "gnusort -n".
Donc l'une des solution possible est de fixer la longueur des chaine de caractères pour qu'il aillent la même longueur, pour se faire on va ajouter des zero "0" à gauche de chaque chaine:
00000001 00001125 00026894 00000369 00000065
ensuite on va les passer à la commande SORT.EXE
c:\> Sort fichier4.txt
00000001 00000065 00000369 00001125 00026894
le trie est effectuer avec succès il nous ne reste plus qu'a enlever les zeros "0" de plus.
1 65 369 1125 26894
et voilà voyons notre script de quoi aura l'air:
@Echo oFF Setlocal EnableExtensions Set liste=1 1125 26894 369 65 396 For %%i in (%liste%) Do >>~@ Call :S %%i For /F "Tokens=*" %%c in ('Sort ~@') do Call:P set "c=%%c" del ~@ pause Endlocal & goto :EOF :S Set "tz=00000000%1" Echo:%tz:~-8% goto :EOF :P %* :z if (%c:~0,1%)==(0) set "c=%c:~1%" & goto:z echo=%c% goto:EOF
comme vous voyez c'est le bordel !! On essayera alors une autre solution,...que dites-vous de
comparer les nombres, nombre par nombre en décalant chaque chiffre de gauche à droite, le plus grand nombre sera décalé à droite et le plus petit à gauche ? un SORT à bulle...quoi..
@Echo oFF Call :Sort 1256 280 3 10 2 98 259 563 8 pause goto :EOF :Sort Setlocal EnableDelayedExpansion Set/A n=1,s=0,c=s,r=s for %%: In (%*) do ( Set /a c+=1 Set "nm.!c!=%%:") :LP.1 if %s% EQU %c% Set/A n+=1,s=0 Set/A s+=1 Call :SPL %n% %s% If %n% LEQ %c% goto :LP.1 :LP.2 Echo:!nm.%c%! Set/A c-=1 If %c% GTR 0 goto :LP.2 Endlocal & goto :EOF :SPL If !nm.%1! GTR !nm.%2! ( Set "t=!nm.%2!"&Set "nm.%2=!nm.%1!" Set "nm.%1=!t!" ) goto :EOF
c'est plus simple..non.. :)
Aucun commentaire:
Enregistrer un commentaire