Problème de programmation Notepad++

Ronin -  
 Ronin -
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

4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    moi j'essaierais d'adapter le fichier .bat
    0
    1. Ronin
       
      Vous êtes d'une aide inestimable...
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Ronin
         
        Bonjour,
        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...
        :-)
        0
      2. Ronin > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Beaucoup trop subtil alors...
        0
  2. Ronin
     
    @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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      qu'appeles-tu "doublon dans les octets"?
      peut-être avec des exemples.
      0
      1. Ronin > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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.
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Ronin
         
        qui tombe plusieurs fois dans la même adresse, ou globalement?
        0
      3. Ronin > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Qui tombe plusieurs fois dans la même adresse.
        0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    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 :

    @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


    0
  4. Ronin
     
    Merci pour la proposition, j'ai essayé mais il y a eu des doublons quand même...
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Je peux rajouter un filtre pour éviter les doublons dans les 5 octets.
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
        0
      2. Ronin > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Ok merci, j'aimerais maintenant savoir s'il est possible d'éviter/interdire le 0 dans une adresse ?
        0
      3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > Ronin
         
        Oui il suffit de rajouter +1 comme ceci :
        set /a octet%2=!random! * %1 / 32768 + 1
        0
      4. Ronin > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Ok je vais voir ça. Merci
        0