Hola,
En mi form, creo una variable que contiene un string, que más tarde usaré en un botón para lanzar una app externa con los argumentos que previamente estan guardados en mi variable.
El contenido de la variable es este:
Winamp.exe "Argumento 1" "argumento 2" "argumento 3" "más argumentos"
PD: Los argumentos son rutas de carpetas.
Y lo que quisiera hacer es un split para obtener cada argumento, osea, cada carpeta que está encerrada en comillas,y hacer algo así:
' Pseudocode
For each folder in var.split(ControlChars.Quote)
for each file in get.folder.files
appendline.(archivo_de_Texto, file.Name)
Next
¿Como puedo hacer ese split en VB?
EDITO:
He intentadoe sto, pero me dice que hay caracteres ilegales... :S
Dim entries = playerargs.Split(" "c)
For n As Integer = 1 To entries.Length - 1
Dim files As String() = Directory.GetFiles(entries(n))
Next
Environment.GetCommandLineArgs, te entrega la lista de parámetros con la que fue llamada tu aplicación, ya ordenada, comenzando desde la ruta completa de tu ejecutable.
Gracias Keyen Night, pero no es lo que busco
me ha hecho gracia, porque eres la tercera víctima persona que por mi culpa se ha confundido con mi duda, ya la he editado/vuelto a plantear, sorry, ojalá puedas ayudarme con eso.
Eso se puede solucionar fácilmente con expresiones regulares, como es un tema extenso te regalo el código, con la condición de que investigues un poco es un tema interesante y muy útil :xD
Edito: Para modificar el error del espacio de la expresión regular.
Imports System.Text.RegularExpressions
Dim Expresión As String = String.Format("{0}[^{0}$]+{0}", Convert.ToChar(32))
'Esta variable simula la que tu creas en tu aplicación'
Dim Comando As String = String.Format("Comando.exe {0}C:\ejemplo{0} {0}C:\carpeta\ruta{0} {0}D:\archivos{0}", Convert.ToChar(32))
For Each x As Match In Regex.Matches(Comando, Expresión)
MessageBox.Show(x.Value)
Next
Gracias otra vez Keyen, las expresiones regulares se usarlas (al menos en otros lenguajes), pero yo esto {0} nunca lo habia visro en un RegEx, y por más que busco información sobre que es... ni idea, y para colmo la usas al principio, la usas en medio (en una agrupación), y la vuelves a usar al final del regex, no he podido trabajar el patrón porque no sé que significa el {0} XD
Tu ejemplo me falla al encontrar un espacio en el string, he intentado añadirle (s) al patrón pero... como ya te digo con tanto {0} no sé por donde cojer la expresión.
Dim Expresión As String = String.Format("{0}[^{0}]+?{0}", Convert.ToChar(32))
'Esta variable simula la que tu creas en tu aplicación'
Dim Comando As String = String.Format(playerargs, Convert.ToChar(32))
For Each x As Match In Regex.Matches(Comando, Expresión)
MessageBox.Show(x.Value)
Next
Si la variable contiene la cadena "C:\carpeta\con espacios" el messagebox solo me muestra: "C:\Carpeta\Con, incluido la comilla, que tambien se la debería quitar... un rollo :xD
EDITO: Ya lo he solucionado:
Str = Replace(playerargs, " " & ControlChars.Quote, "")
' El contenido de Cadena queda así: C:\Ruta 1"C:\Ruta 2"C:\Ruta 3"etc..."
He intentado hacer esto otro por mi cuenta, y me está dando mejores resultados...
El problema es que creo que en el array se guardan cadenas vacías,
si pudiera omitirlas con un "If NOTHING" me conformo, de hecho así es como las omito en este code, pero me sigue fallando una, solamente una... y no se como evitarla:
Dim Str As String
' Elimino los espacios entre argumentos
Str = Replace(playerargs, " " & ControlChars.Quote, ControlChars.Quote)
' El contenido de Cadena queda así: "C:\Ruta 1""C:\Ruta 2""Más rutas..."
' El patrón delimitador (comilla)
Dim Pattern As String = ControlChars.Quote
Dim ArgsArray() As String 'Creamos un array
ArgsArray = Split(Str, Pattern) 'Llenamos el array con las cadenas cortadas.
' Mostramos como ha quedado el resultado
For Each folder In ArgsArray
If Not folder = Nothing Then
Console.WriteLine(folder)
MessageBox.Show(folder)
End If
If randomize.Checked = True Then
' RandomiseFile("c:\1.txt")
End If
primero me muestra una caja vacía:
(http://img690.imageshack.us/img690/5559/prtscrcaptureqh.jpg)
(Es la cadena que quiero evitar, para la función que tengo que darle más tarde al array, que no quiero que me de error...)
y luego me muestra una caja de texto con cada "argumento", sin mostrarme ninguna otra caja vacía:
(http://img59.imageshack.us/img59/6059/prtscrcapture2h.jpg)
Los índices ({0}) no son de las expresiones regulares, son del string.format :P
Saludos