Problème de programmation Notepad++
Fermé
Bonjour,
J'aimerai un coup de pouce pour me débloquer. J'ai un fichier .bat qui génère aléatoirement des adresses ip et masque de sous-réseau associé à cette adresse ip, j'aimerai savoir comment je peux faire en sorte d'éviter les doublons dans les octets, je précise que je travail avec Notepad++. Merci
J'aimerai un coup de pouce pour me débloquer. J'ai un fichier .bat qui génère aléatoirement des adresses ip et masque de sous-réseau associé à cette adresse ip, j'aimerai savoir comment je peux faire en sorte d'éviter les doublons dans les octets, je précise que je travail avec Notepad++. Merci
A voir également:
- Problème de programmation Notepad++
- Telecharger notepad++ - Télécharger - Édition & Programmation
- Application de programmation - Guide
- Finale notepad - Télécharger - Outils professionnels
- Network notepad - Télécharger - Dessin & Illustration
- Notepad++ android - Télécharger - Traitement de texte
4 réponses
yg_be
Messages postés
23535
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 avril 2025
Ambassadeur
1 579
13 févr. 2021 à 10:50
13 févr. 2021 à 10:50
bonjour,
moi j'essaierais d'adapter le fichier .bat
moi j'essaierais d'adapter le fichier .bat
@echo off
REM DEBUT DU PROGRAMME
:start
REM CLEAR SCREEN
cls
REM PREMIER OCTET
:A
set /a A=%random%
if %A% GTR 49 goto A
REM DEUXIEME OCTET
:B
set /a B=%random%
if %B% GTR 49 goto B
REM TROISEME OCTET
:C
set /a C=%random%
if %C% GTR 49 goto C
REM QUATRIEME OCTET
:D
set /a D=%random%
if %D% GTR 49 goto D
REM CINQUIEME OCTET
:E
set /a E=%random%
if %E% GTR 49 goto E
REM DEFINITION DE LA CLASSE
if %A% LEQ 10 goto NMA
REM NETMASK CLASSE A
:NMA
set /a NM=%random%
if %NM% LSS 1 goto NMA
if %NM% GTR 10 goto NMA
goto result
REM RESULTAT
:result
echo %A%.%B%.%C%.%D%.%E%/%NM%
pause > nul
REM REDEMARRAGE DU PROGRAMME
goto start
REM DEBUT DU PROGRAMME
:start
REM CLEAR SCREEN
cls
REM PREMIER OCTET
:A
set /a A=%random%
if %A% GTR 49 goto A
REM DEUXIEME OCTET
:B
set /a B=%random%
if %B% GTR 49 goto B
REM TROISEME OCTET
:C
set /a C=%random%
if %C% GTR 49 goto C
REM QUATRIEME OCTET
:D
set /a D=%random%
if %D% GTR 49 goto D
REM CINQUIEME OCTET
:E
set /a E=%random%
if %E% GTR 49 goto E
REM DEFINITION DE LA CLASSE
if %A% LEQ 10 goto NMA
REM NETMASK CLASSE A
:NMA
set /a NM=%random%
if %NM% LSS 1 goto NMA
if %NM% GTR 10 goto NMA
goto result
REM RESULTAT
:result
echo %A%.%B%.%C%.%D%.%E%/%NM%
pause > nul
REM REDEMARRAGE DU PROGRAMME
goto start
yg_be
Messages postés
23535
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 avril 2025
1 579
16 févr. 2021 à 12:16
16 févr. 2021 à 12:16
qu'appeles-tu "doublon dans les octets"?
peut-être avec des exemples.
peut-être avec des exemples.
Ronin
>
yg_be
Messages postés
23535
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 avril 2025
17 févr. 2021 à 03:26
17 févr. 2021 à 03:26
Bah un doublon c'est simple c'est un nombre qui tombe plusieurs fois. Et c'est ce que je souhaite éviter. J'aimerai aussi interdire le 0 dans les octets.
yg_be
Messages postés
23535
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 avril 2025
1 579
>
Ronin
17 févr. 2021 à 10:54
17 févr. 2021 à 10:54
qui tombe plusieurs fois dans la même adresse, ou globalement?
Ronin
>
yg_be
Messages postés
23535
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 avril 2025
17 févr. 2021 à 12:59
17 févr. 2021 à 12:59
Qui tombe plusieurs fois dans la même adresse.
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 923
Modifié le 16 févr. 2021 à 15:20
Modifié le 16 févr. 2021 à 15:20
Bonjour,
Tu utilises %RANDOM% sans lui définir un nombre mini et maxi, donc ton script passe son temps à générer des nombres inutiles, puisque en dehors de la fourchette utile.
Apparemment la commande %RANDOM% se base sur l'heure système pour générer ses nombres, donc pour ne pas se retrouver avec à chaque fois les mêmes nombres générés je suggère d'instaurer une temporisation d'une seconde entre chaque génération.
En modifiant légèrement ton script, voilà ce que ça donnerait :
Tu utilises %RANDOM% sans lui définir un nombre mini et maxi, donc ton script passe son temps à générer des nombres inutiles, puisque en dehors de la fourchette utile.
Apparemment la commande %RANDOM% se base sur l'heure système pour générer ses nombres, donc pour ne pas se retrouver avec à chaque fois les mêmes nombres générés je suggère d'instaurer une temporisation d'une seconde entre chaque génération.
En modifiant légèrement ton script, voilà ce que ça donnerait :
@echo off setlocal enableextensions enabledelayedexpansion REM DEBUT DU PROGRAMME :start REM CLEAR SCREEN cls & set "address=" REM LES 5 OCTETS for /L %%A in (1,1,5) do call :generator 49 %%A REM DEFINITION DE LA CLASSE if !octet1! LEQ 10 goto NMA REM NETMASK CLASSE A :NMA timeout /t 1 /nobreak >nul set /a NM=!random! * 10 / 32768 + 1 if %NM% LSS 1 goto NMA if %NM% GTR 10 goto NMA goto result REM RESULTAT :result cls & echo. & echo Resultat = !address:~1!/%NM% echo. & pause REM REDEMARRAGE DU PROGRAMME goto start REM GENERATION D'UN NOMBRE ALEATOIRE :generator timeout /t 1 /nobreak >nul set /a octet%2=!random! * 50 / 32768 + 1 if !octet%2! GTR %1 (goto :generator) else (set "address=!address!.!octet%2!") cls & echo. & echo Adresse = !address:~1! goto :eof
Merci pour la proposition, j'ai essayé mais il y a eu des doublons quand même...
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 923
17 févr. 2021 à 03:54
17 févr. 2021 à 03:54
Je peux rajouter un filtre pour éviter les doublons dans les 5 octets.
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 923
>
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
Modifié le 17 févr. 2021 à 04:43
Modifié le 17 févr. 2021 à 04:43
Voilà tu n'auras plus de doublons :
@echo off setlocal enableextensions enabledelayedexpansion REM DEBUT DU PROGRAMME :start REM CLEAR SCREEN cls & set "address=" REM LES 5 OCTETS for /L %%A in (1,1,5) do call :generator 49 %%A REM DEFINITION DE LA CLASSE if !octet1! LEQ 10 goto NMA REM NETMASK CLASSE A :NMA timeout /t 1 /nobreak >nul set /a NM=!random! * 9 / 32768 + 1 if %NM% LSS 1 goto NMA if %NM% GTR 10 goto NMA goto result REM RESULTAT :result cls & echo. & echo Resultat = !address:~1!/%NM% echo. & pause REM REDEMARRAGE DU PROGRAMME goto start REM GENERATION D'UN NOMBRE ALEATOIRE :generator timeout /t 1 /nobreak >nul set /a octet%2=!random! * %1 / 32768 if !octet%2! GTR %1 (goto :generator) echo !address! | findstr "\<!octet%2!\>" >nul && goto :generator || set "address=!address!.!octet%2!" cls & echo. & echo Adresse = !address:~1! goto :eof
Ronin
>
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
17 févr. 2021 à 13:03
17 févr. 2021 à 13:03
Ok merci, j'aimerais maintenant savoir s'il est possible d'éviter/interdire le 0 dans une adresse ?
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 923
>
Ronin
Modifié le 17 févr. 2021 à 13:51
Modifié le 17 févr. 2021 à 13:51
Oui il suffit de rajouter +1 comme ceci :
set /a octet%2=!random! * %1 / 32768 + 1
Ronin
>
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
17 févr. 2021 à 15:30
17 févr. 2021 à 15:30
Ok je vais voir ça. Merci
16 févr. 2021 à 08:01
16 févr. 2021 à 08:59
Je pense que c'était une façon subtile de te dire que sans voir le code il nous est impossible de te répondre...
:-)
16 févr. 2021 à 12:07