Trier une variable (chiffre) croissant ?

Fermé
L'enfantPerdu - 16 mars 2017 à 13:09
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 17 mars 2017 à 23:24
J''ai une variable (chiffre) que je veut trier ordre croissant (ex: 1598753 devient 1355789). Comment faire ?

Voici le bout de code que j'ai commencé:

:debut

cls

echo.
echo Rentre une serie de chiffre:
echo.
set /p "serie_de_chiffre=> "

echo %serie_de_chiffre%|findstr /r "[^0-9]" > nul

IF ERRORLEVEL 1 goto suite

IF NOT ERRORLEVEL 1 goto faux_1

:faux_1

echo.
echo Une serie de chiffre!

timeout /t 3 >nul

goto debut

:suite

cls

echo.
echo Ta serie de chiffre est donc:
echo.
echo %serie_de_chiffre%
echo.
echo.
echo [OUI]
echo [NON]
echo.
set /p "serie_de_chiffre?=> "

if /i %serie_de_chiffre?%==oui goto continu
if /i %serie_de_chiffre?%==non goto debut

echo.
echo Pas comprit..

timeout /t 3 >nul

goto suite

:continu

cls

echo.
echo SERIE DE CHIFFRE:
echo.
echo %serie_de_chiffre%
echo.
echo.
echo TRIER:
echo.
-------------------------------------------------------------------------------------
CODE POUR TRIER LA VARIABLE
-------------------------------------------------------------------------------------
echo %serie_de_chiffre%

pause>nul

1 réponse

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié par barnabe0057 le 17/03/2017 à 23:37
Bonsoir,

Voilà la solution :

@echo off & Setlocal EnableDelayedExpansion

set chaine=192634355673879
echo La serie de chiffres a trier : %chaine%
echo. & color 0A

set /a zero=0
set /a une=0
set /a deux=0
set /a trois=0
set /a quatre=0
set /a cinq=0
set /a six=0
set /a sept=0
set /a huit=0
set /a neuf=0

for /L %%A in (0,1,1000) do (

set nombre=!chaine:~%%A,1!

if "!nombre!" == "" goto suite

if "!nombre!" == "0" set /a zero+=1
if "!nombre!" == "1" set /a une+=1
if "!nombre!" == "2" set /a deux+=1
if "!nombre!" == "3" set /a trois+=1
if "!nombre!" == "4" set /a quatre+=1
if "!nombre!" == "5" set /a cinq+=1
if "!nombre!" == "6" set /a six+=1
if "!nombre!" == "7" set /a sept+=1
if "!nombre!" == "8" set /a huit+=1
if "!nombre!" == "9" set /a neuf+=1

)

:suite

set zero=!zero!0
set une=!une!1
set deux=!deux!2
set trois=!trois!3
set quatre=!quatre!4
set cinq=!cinq!5
set six=!six!6
set sept=!sept!7
set huit=!huit!8
set neuf=!neuf!9

for %%D in (!zero! !une! !deux! !trois! !quatre! !cinq! !six! !sept! !huit! !neuf!) do (

set carac=%%D

set /a chiffre=!carac:~-1!

if !carac! GEQ 100 (set /a repet=!carac:~0,2!) else (set /a repet=!carac:~0,1!)

echo Le chiffre !chiffre! est present !repet! fois

if "!repet!"=="0" (set /a repet=1 & set chiffre=)

for /L %%B in (1,1,!repet!) do (

set result=!result!!chiffre!

)

)

echo.
echo Voila le resultat : !result!
echo. & echo.

Endlocal
pause
exit
0