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

VB.NET Discussion :

Arguments nommés en ligne de commande


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut Arguments nommés en ligne de commande
    Bonjour,
    Je "migre" un programme écrit en VBScript en VB.Net.
    Ce programme batch reçoit des arguments nommés de la ligne de commande.
    En VBScript, cela se code de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim OArgs, PN_Extrac, ERREUR
    Set OArgs =WScript.Arguments.Named
    If OArgs.Exists("extrac") Then
            PN_Extrac = Ucase(OArgs.Item("extrac"))
    Else
            ERREUR = True
    End If
    Je n'arrive pas à trouver la correspondance en VB.Net.
    Certes, il est possible de le faire dans une procédure (sub (toto:="aaa")), mais moi, c'est de la ligne de commande que je veux les récupérer.
    Le programme .bat contient :
    c:\windows\system32\cscript.exe %ARES_CPT_HOME%\ARCOGEFI.vbs /extrac:RECETTE
    Sauriez-vous l'équivalent de "WScript.Arguments.Named" en VB.Net ?
    Certes, je peux "travailler" sur la chaîne de caractères, mais, en réalité, j'ai une dizaine d'arguments, obligatoires et facultatifs, et la gestion d'arguments nommés simplifie énormément le code en plus de la lisibilité.
    Grand merci pour votre coup de main.
    Cordialement.

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Bonjour,

    Je crois qu'il y a un début d'explication là :

    http://www.developpez.net/forums/d25...e-parametre-f/
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Bonjour,

    Je crois qu'il y a un début d'explication là :

    http://www.developpez.net/forums/d25...e-parametre-f/
    Merci, mais la réponse donnée :
    Nom : Capture.JPG
Affichages : 305
Taille : 20,4 Ko
    dit simplement qu'il faut "analyser" la chaîne de caractères transmise. Ceci dit, il donne, plus loin, des instructions que je ne connaissais pas et qui sont intéressantes.
    Mais, qui ne résolve pas le problème posé.
    À dire vrai, je m'attendais à un truc du genre "MonString.nammed("toto")".
    En apparté, et qui n'a rien à voir le sujet : MonString.ToLower() Dans ce cas ToLower ne sert à rien, un String est TOUJOURS minuscule :+)
    Merci quand même.
    Cordialement.

  4. #4
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Dans ce cas il faut parser la ligne de commande:

    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
            Dim namedArguments = New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)
            Dim positionArguments = New Dictionary(Of Integer, String)()
            Dim helpRequested As Boolean = False
     
            Dim args As String() = Environment.GetCommandLineArgs()
            If args Is Nothing Then
                Return
            End If
     
            For i As Integer = 0 To args.Length - 1
                If i = 0 Then
                    Continue For
                End If
     
                Dim arg As String = args(i).Trim()
                If String.IsNullOrEmpty(arg) Then
                    Continue For
                End If
     
                Dim upper As String = arg.ToUpperInvariant()
                If (arg = "/?") OrElse (arg = "-?") OrElse (upper = "/HELP") OrElse (upper = "-HELP") Then
                    helpRequested = True
                End If
     
                Dim named As Boolean = False
                If (arg(0) = "-"c) OrElse (arg(0) = "/"c) Then
                    arg = arg.Substring(1)
                    named = True
                End If
                Dim name As String
                Dim value As String
                Dim pos As Integer = arg.IndexOf(":"c)
                If pos < 0 Then
                    name = arg
                    value = Nothing
                Else
                    name = arg.Substring(0, pos).Trim()
                    value = arg.Substring(pos + 1).Trim()
                End If
                positionArguments(i - 1) = arg
     
                If named Then
                    namedArguments(name) = value
                End If
            Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If (namedArguments("extrac") = "RECETTE") Then
    End If
    Tu peux retrouver ce code en plus complet dans CodeFluent Runtime (CommandLineUtilities)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Merci.

    Effectivement, j'avais pensé à utiliser le Dictionnary, mais sans aller jusqu'au bout de la démarche.
    J'avoue que c'est pas mal, et je vais le mettre en oeuvre. Merci.
    Je suis quand même surpris que, sur ce point, VBScript soit plus performant que VB.Net.

    Merci encore à tous.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Saisie d'arguments dans la ligne de commande
    Par sangei dans le forum Général Java
    Réponses: 20
    Dernier message: 06/12/2009, 16h08
  2. récupération d'arguments de la ligne de commande
    Par Jérémy Lefevre dans le forum C
    Réponses: 2
    Dernier message: 07/11/2006, 10h53
  3. [CF1][VB.NET] Récupèrer arguments de la ligne de commande
    Par azerty25 dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 01/11/2006, 20h47
  4. récupérer les arguments de la ligne de commande
    Par gblanc dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/10/2005, 23h08
  5. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01

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