Mis Utilidades:

Desglosar la línea de Comandos

Utilidad para desglosar la línea de comandos en cada uno de los parámetros.

 

Fecha: 30/Sep/97
Nota del 07/Feb//2005: Te recomiendo que veas este nuevo código.


Esta es una función genérica que tomará una cadena, (por defecto es la cadena Command$) y la desglosará en cada uno de los parámetros que se han introducido.

Normalmente los parámetros están separados por espacios o van precedidos de / o -, además tiene en cuenta si una palabra está dentro de comillas.
Los valores los devuelve en un array global llamado argv(), el número de argumentos o parámetros estarán en la variable argc y también será el valor que devuelva esta función. Los que hayan programado en C, sabrán el porqué de estos nombres...

Para usarla:
Command2Arg                                 'En este caso se interpretará la línea de comandos
Command2Arg VariableDeCadena    'Se inerpreta el contenido del string VariableDeCadena

El código de la función:

'-------------------------------------------------------------
'Módulo para desglosar los parámetros de la línea de comandos
'
'Primera versión:   30/Sep/97
'
'(c)Guillermo Som, 1997
'-------------------------------------------------------------
Option Explicit

Public argv() As String     'Contenido de cada argumento
Public argc As Integer      'número de argumentos


Public Function Command2Arg(Optional ByVal vCommand As Variant) As Integer
    'Devuelve lo que hay en command$ o en la variable de entrada
    'en un array global Argv() y devuelve el número de parámetros
    'o cero si no hay ninguno
    '-------------------------------------------------------------
    Dim sCommand As String
    Dim c As String
    Dim sTmp As String
    Dim i As Integer
    Dim Separadores As String
    
    Separadores = "/- " & Chr$(34) & Chr$(9)
    
    ReDim argv(0)
    argc = 0
    'Si no se especifica el parámetro se toma la línea de comandos
    If IsMissing(vCommand) Then
        sCommand = Trim$(Command$)
    Else
        sCommand = Trim$(CStr(vCommand))
    End If
    'Si no tiene nada la variable devolver cero
    If Len(sCommand) = 0 Then
        Command2Arg = 0
        argc = 0
        Exit Function
    End If
    
    i = 0
    Do While i < Len(sCommand)
        i = i + 1
        c = Mid$(sCommand, i, 1)
        If c = Chr$(34) Then
            sTmp = ""
            Do While i < Len(sCommand)
                i = i + 1
                c = Mid$(sCommand, i, 1)
                If c = Chr$(34) Then Exit Do
                sTmp = sTmp & c
            Loop
            argc = argc + 1
            ReDim Preserve argv(argc)
            argv(argc) = Trim$(sTmp)
            sTmp = ""
        ElseIf c = "/" Or c = "-" Or c <> " " Then
            sTmp = c
            Do While i < Len(sCommand)
                i = i + 1
                c = Mid$(sCommand, i, 1)
                If InStr(Separadores, c) Then
                    i = i - 1
                    Exit Do
                End If
                sTmp = sTmp & c
            Loop
            argc = argc + 1
            ReDim Preserve argv(argc)
            argv(argc) = Trim$(sTmp)
            sTmp = ""
        End If
    Loop
    Command2Arg = argc
End Function

Un form para probar:

Option Explicit
Private Sub cmdProbar_Click()
    Probar Text1
End Sub


Private Sub cmdSalir_Click()
    Unload Me
    End
End Sub


Private Sub Form_Load()
    Text1 = Command$
    Probar
End Sub


Private Sub Form_Unload(Cancel As Integer)
    Set Form1 = Nothing
End Sub


Private Sub Probar(Optional ByVal vCommand As Variant)
    Dim n As Integer
    Dim i As Integer
    Dim sCommand As String
    
    If IsMissing(vCommand) Then
        n = Command2Arg()
    Else
        n = Command2Arg(CStr(vCommand))
    End If
    List1.Clear
    If n Then
        For i = 1 To n
            List1.AddItem argv(i)
        Next
    End If
End Sub

ir al índice