begin process at 2012 05 27 13:32:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

 > ANALYSER UNE LIGNE DE COMMANDE, SIMPLEMENT

ANALYSER UNE LIGNE DE COMMANDE, SIMPLEMENT


 Information sur la source

Note :
7,2 / 10 - par 5 personnes
7,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Texte Niveau :Initié Date de création :12/05/2005 Date de mise à jour :13/05/2005 23:00:15 Vu :6 071

Auteur : DeadlyPredator

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

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

  • '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
'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


 Historique

12 mai 2005 05:52:59 :
correction d'un oubli: si on soumettait un tableau contenant déjà des strings, la valeur index ne s'ajustait pas au début.
12 mai 2005 06:04:08 :
optimisation en utilisant Let et Call
13 mai 2005 23:00:15 :
merci à econs pour le truc avec Not

 Sources du même auteur

UN FILE/FOLDER EXISTS TRÈS UTILE, COMPLET ET SANS AUTES CHOS...
Source avec Zip ÉTUDE SUR LES BOUCLES (DO LOOP, WHILE, UNTIL)
Source avec Zip CLASSE LECTRICE DE FICHIERS INI SANS UTILISER LES APIS
GESTION DE FICHIERS INI AVANCÉE
Source avec Zip AVOIR LA SOURCE ASM DE VOTRE PROJET VB

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) FABRIQUEUR DE STATUTS/MESSAGES SPÉCIAUX par pablo836
Source avec Zip Source avec une capture MASQUE DE SAISIE NUMÉRIQUE par acive
Source avec Zip Source .NET (Dotnet) COMPTEUR DE NOMBRE DE MOTS DANS UN TEXTE par alpha5
Source avec Zip Source avec une capture HM - BLOCNOTE par hassenmajor
Source .NET (Dotnet) [VB.NET] CLASS DE COLORATION SYNTAXIQUE "ON THE FLY" par huzima

Commentaires et avis

Commentaire de econs le 12/05/2005 10:59:54 administrateur CS

---------------------------------------------
        If bInStr Then
        Let bInStr = False
        Else
        Let bInStr = True
        End If

peut s'écrire plus simplement :

bInStr = Not bInStr

---------------------------------------------

Let et Call n'optimisent qu'une seule chose : la compatibilité avec d'anciennes versions de VB. L'execution du code n'y gagne rien

---------------------------------------------

En utilisant la fonction Split, une bonne partie du travail était déjà faite. Il ne restait plus qu'à recoller les morceaux qui sont entre guillemets. Mais je suppose que tu l'as soigneusement évitée.

    aParams = Split(strJob, " ", , vbTextCompare)


---------------------------------------------

A part çà, le code est bien foutu. Pas de bug en vue. C'est nickel. :o)

Commentaire de DeadlyPredator le 12/05/2005 22:06:49

Salut

Je ne suis pas sûre que le fait de faire bInStr = Not bInStr aide vraiment. Selon moi, vb ferait une opération de plus car en asm, avec un =, c'est un simple mov qui est effectué. Avec ta méthode, vb va devoir inverser la valeur de bInStr, puis faire un mov ...

pour Let et Call, j'aimerais bien avoir l'avis d'un expert qui va pouvoir confirmer.

Pour l'idée de spliter, ça serait possible cependant, je crois que ça demanderait le double de traitement. Ma boucle est très simple et rapide. Split doit être lourd et de toute facon je vais devoir scanner le string au complet.

Merci pour l'intérêt porté à ce code

Commentaire de Saros le 13/05/2005 16:54:33

Mettre les Let et Call ça n'a aucun effet sur l'exécution du programme, si tu les met pas ils sont implicites et rajoutés par VB lors de la compilation de toute façon.

Et pour Not, j'ai pas trop compris ton explication :/ Il me semblait qu'éviter un If était plutôt à éviter....

Et sinon, tu pourrais donner l'exemple (dans Main) avec la chaine de commande passée au programme ? Pour montrer comment faire

Commentaire de DeadlyPredator le 13/05/2005 22:54:16

Oups, j'avais mal comprit le sens du not, il inverse la valeur de la variable. Je vais ajuster ça et suprimer les call et let car ça fait du texte pour rien. J'ai choisit d'utiliser une chaine de caractère à la place du command$ car comme ça, le monde n'est pas oubligé de lancer le proc avec une ligne de commande (ou modifier l'option command line de vb). Si ça marche pour cette chaine de caractère là, ça va aussi marcher pour command$ ... et c qui les personnes qui donnent des 1/10?

Commentaire de Saros le 14/05/2005 08:36:05

Des gens qui estiment que leur jugement se passe de commentaires

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales