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 VariableDeCadenaEl 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 FunctionUn 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