Analyser une ligne de commande, simplement

Contenu du snippet

Cette petite procédure permet d'analyser la ligne de commande de votre application ou tout autre chaine de caractères. Cela est très pratique quand le programme reçoit ces paramètres ainsi. Par exemple, votre programme est lancé avec la ligne de comande :
monprog.exe -a -b"un chemin complexe" -c:5 d
ma procédure va lors retourner un tableau de strings avec les valeurs suivantes:{
-a
-b"un chemin complexe"
-c:5
d
}donc vous n'avez tout simplement qu'à changer un paramètre pour que la procédure pour que les guillemets ne soient pas inclus et vous pouvez faire un split pour avoir paramètre:valeur.

Source / Exemple :


'Fait par DeadlyPredator le 11 mai 2005

'strCommandLine: chaine de caractères qu'il faut analyser
'aArgs: un tableau de strinsg (dim aArgs() as string)
'bKeepQuotes: si il faut conserver les guillemets
'bErase: si true, la procédure efface le tableau de strings que vous lui envoyé avant de l'utiliser

Sub ParseCommandLine(ByVal strCommandLine As String, ByRef aArgs() As String, Optional bKeepQuotes As Boolean = True, Optional bErase As Boolean = False)
On Error Resume Next
Dim i As Long, bInStr As Boolean, strCar As String, index As Long, strArg As String
If bErase Then Erase aArgs Else: index = UBound(aArgs) + 1: Err.Clear
For i = 1 To Len(strCommandLine)
strCar = Mid$(strCommandLine, i, 1)
    Select Case strCar
    Case """"
    bInStr = Not bInStr
        If bKeepQuotes Then strArg = strArg & """"
    Case " "
        If bInStr Then
        strArg = strArg & strCar
        Else
            If Not Trim$(strArg) = vbNullString Then
            ReDim Preserve aArgs(index)
            aArgs(index) = strArg
            index = index + 1
            End If
        strArg = vbNullString
        End If
    Case Else
    strArg = strArg & strCar
    End Select
Next
ReDim Preserve aArgs(index)
aArgs(index) = strArg
End Sub

Private Sub main()
Dim aParams() As String, strJob As String, i As Long
strJob = "-a -b""un chemin         complexe"" -c:5 d" 'strJob pourrait être remplacer par Command$ pour analyser la ligne de commande du programme
ParseCommandLine strJob, aParams, False, False
    For i = 0 To UBound(aParams)
    MsgBox (aParams(i))
    Next
End Sub

Conclusion :


Je ne crois pas qu'il y ait de bugs

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.