IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

9 plus grand que 80? Quand la comparaison oublie les décimales.


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 58
    Points
    58
    Par défaut 9 plus grand que 80? Quand la comparaison oublie les décimales.
    Salut,

    j'ai un problème de comparaison de nombre sur ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    set line=*
    set /a num=0
    set /a total=0
    :: nombre total de caractères par ligne (utile pour limiter l'affichage des fichier sur une seule ligne) :
    set /a maxchar=80
    for /f "skip=%skip% tokens=* delims=" %%e in (%thisbatch%.bat) do (
    	if "%%e" neq "" (
    		if "%%e" equ "[new instance]" (
    			if "!line!" neq "*" ( 
    				echo   !line!
    				set line=*
    				set /a total=0
    			)
    			set /a num+=1
    			echo.
    			echo   INSTANCE !num! : 
    		) else if "%%e" neq "[new instance]" ( 
    				call :file_only "%%e"
    echo !file!
    				call :analyse !file!
    				set file_length=!length!
    				if "!line!" neq "*" (
    					call :analyse "!line!"
    					set line_length=!length!
    				) else (
    					set line_length=0
    				)
    				set /a total=!line_length!+!file_length!
    echo !total!
    			if "!total!" leq "%maxchar%" (
    				set line=!line!  !file!
    			) else if "!total!" gtr "%maxchar%" (
    				echo   !line!
    				if "!file!" neq "" ( set line=**  !file! )
    				set /a total=0
    			)
    		)
    	)
    )
    goto liste
    :file_only
    set file=%~nx1
    goto :eof
    ::
    :analyse
    set Chain=%~1
    set /a length=-1
    :boucle
    set /a length+=1
    set temp=!Chain:~%length%,1!
    if not "%temp%"=="" goto boucle
    goto :eof
    ::
    :liste
    echo   !line!
    echo.
    echo   ------------------------------
    Ne faites pas attention aux "echo" décalés vers la gauche ; ils ne sont là que pour m'aider à débuguer le code, j'ai oublié de les virer...

    Comme d'hab un ptit screenshot avec des jolies couleurs pour aider les zyeux : http://img200.imageshack.us/img200/3/20090525131949.jpg
    Remarque : je n'ai pas pu inclure tout l'extrait dans le screenshot !


    Explication sommaire (le code ici n'est qu'un extrait) :
    - C'est un batch qui permet de lancer plusieurs fichiers dans une ou plusieurs instances de notepad++. Utile pour éviter d'avoir à ouvrir plusieurs instances à la main et de cliquer "ouvrir" puis "charger une session" à chaque fois !
    - L'utilisateur n'a qu'à rentrer à la main tout à la fin du batch (après un repère) les chemins vers les fichiers, en les intercallant de "[new instance]" à chaque fois qu'il veut en lancer une. Le batch s'analyse lui-même pour trouver le repère et lire les chemins.
    - L'extrait de code ci-dessus concerne l'accueil du batch, où on prévient l'utilisateur qu'il va lancer des fichiers dans notepad++, et où on lui affiche le récapitulatif des fichiers/instances qui vont être lancées.
    - Comme le récapitulatif affiche "INSTANCE n°x", passe à la ligne, et affiche tout à la suite les fichiers de l'instance listée, j'ai pensé bon de limiter le nombre de fichiers par ligne, en limitant simplement le nombre de caractère par ligne. Ceci simplement pour éviter d'avoir à scroller la console.

    Problème :
    - j'ai remarqué une ligne vide avec juste un "*" au début. Je ne comprenais vraiment pas d'où ça pouvait venir...
    - j'ai fini par me remémoriser un problème simple mais totalement étrange : si l'opérateur compare "9" et "80", il trouve que 9 est plus grand que 80:/


    Voilà, tout est dit, je voudrais simplement règler ce problème avec votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Regarde s'il n'y a pas un moyen de forcer une comparaison numérique.
    Car en effet, en comparaison alphabétique, 9 est supérieur à 80...

  3. #3
    Rédacteur/Modérateur
    Avatar de NorocBzh
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2008
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 834
    Points : 1 265
    Points
    1 265
    Par défaut
    Salut,

    J'ai eu ce problème pour les chiffres 8 et 9 (moi, c'était pour les date, mais je pense que le problème de fond est peut être le même )
    Si ça peut t'aider : http://www.developpez.net/forums/d70...e-marche-plus/

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    @Médinoc : pour forcer une comparaison numérique, il faut apparemment (selon les infos en tapant "set /?" dans un .bat) utiliser "/a" comme argument. Mais ça ne change rien...

    @NorocBzh : merci, mais je ne vois pas trop comment m'inspirer de ton code.
    Je ne pense pas me tromper en disant que tu as dû règler ton problème grâce à cette ligne :
    if %jour% LSS 10 ( set /a jour_precedent = %jour:~1,2% - 1)
    Mais je ne comprend pas trop où est l'astuce.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    C'est bon j'ai rusé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			) else if "!total!" gtr "%maxchar%" (
    				if not "!total!" equ "9" (
    					echo   !line!
    					if "!file!" neq "" ( set line=  !file! )
    					set /a total=0
    				)
    			)
    merci, sujet résolu ! Enfin presque, puisque ça n'est qu'une astuce qu'il faudra réactualiser : en effet si je change "80" par "60", il faudra que j'exclue "7", "8", et "9".

    Si vous avez une solution réelle pour forcer la comparaison numérique, je suis preneur !


    ps : je repasse dès que possible sur le forum pour mettre à disposition mon batch, pour ceux que ça intéresserait

  6. #6
    Rédacteur/Modérateur
    Avatar de NorocBzh
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2008
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 834
    Points : 1 265
    Points
    1 265
    Par défaut
    Citation Envoyé par DeVit Voir le message
    @NorocBzh : merci, mais je ne vois pas trop comment m'inspirer de ton code.
    Je ne pense pas me tromper en disant que tu as dû règler ton problème grâce à cette ligne :

    Mais je ne comprend pas trop où est l'astuce.
    L'astuce est de ne pas récupérer le "0" devant "08" ou "09"
    Plus d'infos sur ce problème du dos avec les 08 et 09 sur ce topic : http://www.developpez.net/forums/d38...probleme-date/

    Pour Dos si ton nombre commence par 0 c'est de l'octal, si ça commence par 0x c'est de l'hexa et sinon c'est du décimal.

    Bref il faut effectivement que tu dégage le 0.

Discussions similaires

  1. comparaison de decimaux (plus grand que)
    Par yanndusud dans le forum Langage
    Réponses: 8
    Dernier message: 19/11/2010, 21h23
  2. Bureau plus grand que l'ecran
    Par taitaitai71 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 21/04/2006, 09h59
  3. [CSS] option plus grand que select
    Par simoryl dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 11/01/2006, 19h27
  4. Réponses: 4
    Dernier message: 06/01/2006, 18h41
  5. [JFrame] Création d'une fenetre plus grande que l'ecran
    Par thetoctoc dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/09/2004, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo