elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  (Solucionado) separar un string en varias cadenas (Split)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Solucionado) separar un string en varias cadenas (Split)  (Leído 4,814 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
(Solucionado) separar un string en varias cadenas (Split)
« en: 22 Noviembre 2012, 00:46 am »

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:
Código
  1. 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í:

Código:
' 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

Código
  1.            Dim entries = playerargs.Split(" "c)
  2.            For n As Integer = 1 To entries.Length - 1
  3.                Dim files As String() = Directory.GetFiles(entries(n))
  4.            Next




« Última modificación: 22 Noviembre 2012, 08:39 am por EleKtro H@cker » En línea



Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: separar un string en varias cadenas (Split)
« Respuesta #1 en: 22 Noviembre 2012, 01:15 am »

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.


« Última modificación: 22 Noviembre 2012, 01:47 am por Keyen Night » En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: separar un string en varias cadenas (Split)
« Respuesta #2 en: 22 Noviembre 2012, 01:30 am »

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.
En línea



Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: separar un string en varias cadenas (Split)
« Respuesta #3 en: 22 Noviembre 2012, 01:46 am »

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.

Código
  1. Imports System.Text.RegularExpressions
  2.  
  3.        Dim Expresión As String = String.Format("{0}[^{0}$]+{0}", Convert.ToChar(32))
  4.  
  5.        'Esta variable simula la que tu creas en tu aplicación'
  6.        Dim Comando As String = String.Format("Comando.exe {0}C:\ejemplo{0} {0}C:\carpeta\ruta{0} {0}D:\archivos{0}", Convert.ToChar(32))
  7.  
  8.        For Each x As Match In Regex.Matches(Comando, Expresión)
  9.            MessageBox.Show(x.Value)
  10.        Next
  11.  
« Última modificación: 22 Noviembre 2012, 15:45 pm por Keyen Night » En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: separar un string en varias cadenas (Split)
« Respuesta #4 en: 22 Noviembre 2012, 08:06 am »

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.


Código
  1.            Dim Expresión As String = String.Format("{0}[^{0}]+?{0}", Convert.ToChar(32))
  2.  
  3.            'Esta variable simula la que tu creas en tu aplicación'
  4.            Dim Comando As String = String.Format(playerargs, Convert.ToChar(32))
  5.  
  6.            For Each x As Match In Regex.Matches(Comando, Expresión)
  7.                MessageBox.Show(x.Value)
  8.            Next
  9.  
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:
Código
  1.            Str = Replace(playerargs, " " & ControlChars.Quote, "")
  2.            ' 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:

Código
  1.            Dim Str As String
  2.            ' Elimino los espacios entre argumentos
  3.            Str = Replace(playerargs, " " & ControlChars.Quote, ControlChars.Quote)
  4.            ' El contenido de Cadena queda así: "C:\Ruta 1""C:\Ruta 2""Más rutas..."
  5.  
  6.            ' El patrón delimitador (comilla)
  7.            Dim Pattern As String = ControlChars.Quote
  8.  
  9.            Dim ArgsArray() As String 'Creamos un array
  10.  
  11.            ArgsArray = Split(Str, Pattern) 'Llenamos el array con las cadenas cortadas.
  12.  
  13.            ' Mostramos como ha quedado el resultado
  14.            For Each folder In ArgsArray
  15.                If Not folder = Nothing Then
  16.                    Console.WriteLine(folder)
  17.                    MessageBox.Show(folder)
  18.                End If
  19.  
  20.  
  21.            If randomize.Checked = True Then
  22.                '  RandomiseFile("c:\1.txt")
  23.            End If
  24.  

primero me muestra una caja vacía:

(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:


« Última modificación: 22 Noviembre 2012, 08:38 am por EleKtro H@cker » En línea



Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: (Solucionado) separar un string en varias cadenas (Split)
« Respuesta #5 en: 22 Noviembre 2012, 13:20 pm »

Los índices ({0}) no son de las expresiones regulares, son del string.format :P

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con string.Split() C#
.NET (C#, VB.NET, ASP)
Edu 2 12,907 Último mensaje 20 Febrero 2011, 20:32 pm
por Edu
Separar strings con asteriscos (*) C# [Split] (?)
.NET (C#, VB.NET, ASP)
Kubynx 2 8,510 Último mensaje 14 Marzo 2011, 04:51 am
por Kubynx
Ayuda con separar numeros de un string
PHP
landerzx 4 5,569 Último mensaje 23 Noviembre 2012, 18:49 pm
por landerzx
Función split para separar valores recibidos por un arduino
.NET (C#, VB.NET, ASP)
Rupertito 1 2,255 Último mensaje 27 Noviembre 2019, 16:58 pm
por Serapis
MOVIDO: Función split para separar valores recibidos por un arduino
Programación Visual Basic
MCKSys Argentina 0 1,594 Último mensaje 20 Noviembre 2019, 20:15 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines