Algo curioso con las comillas en .NET ?

Iniciado por TrashAmbishion, 8 Agosto 2016, 15:07 PM

0 Miembros y 1 Visitante están viendo este tema.

TrashAmbishion

Estoy tratando de que un STRING que se guarda en una variable me quede así:

"Hola" "Mundo" "Mi" "Primer" "Mensaje"

La cuestión es que estoy usando el Chr(34) para crear este resultado pero cuando debugueo la aplicación me doy cuenta que para obtener este resultado el se ve así:

""Hola"" ""Mundo"" ""Mi"" ""Primer"" ""Mensaje""

Ahora esto me representa un problema y es que si quiero trabajar con ese STRING tengo que hacer malabares por las doble comillas, me di cuenta que al insertarlo en un TEXTBOX queda como en el primero, osea que tendría que crear un objeto TEXTBOX pegar el resultado y recuperar el TEXTO de él sin las doble comillas y poder continuar.

Hay alguna otra forma de hacerlo sin necesidad de ese paso ?

Saludos y gracias

Eleкtro

#1
Antes que recurrir a la limitada función Chr()/ChrW() puedes utilizar Convert.ToChar(), pero antes que recurrir a ninguna función simplemente puedes utilizar la constante ControlChars.Quote, y antes que necesitar cualquier cosa de esas simplemente es suficiente con escapar las comillas dobles dentro del string:
Código (vbnet) [Seleccionar]
Dim str As String = """Hola"" ""Mundo"" ""Mi"" ""Primer"" ""Mensaje"""

También puedes utilizar el tag Html: "<a>" -para que el formato de la cadena de texto resulte más legible en tiempo de diseño:
Código (vbnet) [Seleccionar]
Dim str As String = <a>"Hola" "Mundo" "Mi" "Primer" "Mensaje"</a>.Value
(usando esa técnica, ten presente escapar los caracteres reservados "<>&" usando sus respectivos nombres de entidades Html)

Saludos








TrashAmbishion

Hola bro,

Gracias por tu pronta respuesta...

Como decia aún con tu ejemplo no se solucciona la problemática y es que cuando hago el debug y me detengo a ver la el contenido de la variable es este:

"""Hola"" ""Mundo"" ""Mi"" ""Primer"" ""Mensaje"""

Y yo necesito que este asi:

"Hola" "Mundo" "Mi" "Primer" "Mensaje"

Para pasarlo a otra función...

Eleкtro

#3
Cita de: TrashAmbishion en  8 Agosto 2016, 17:55 PMcuando hago el debug y me detengo a ver la el contenido de la variable es este:
"""Hola"" ""Mundo"" ""Mi"" ""Primer"" ""Mensaje"""

Y yo necesito que este asi:
"Hola" "Mundo" "Mi" "Primer" "Mensaje"

Es que en realidad el valor que se compila es """Hola"" ""Mundo"" ""Mi"" ""Primer"" ""Mensaje""" con todas esas comillas dobles incluidas, puesto que ese es el string real ...las comillas dobles se han de escapar, pero una cosa es como lo represente el debugger de Visual Studio, como se represente la IDE en tiempo de diseño, y otra el resultado de ejecución. Los dos ejemplos que te mencioné generan el string: "Hola" "Mundo" "Mi" "Primer" "Mensaje" en tiempo de ejecución, prueba la manera que más te guste.

De todas formas me doy cuenta que tal vez no te entendí bien por que lo que pareces estar pidiendo en realidad es modificar el comportamiento del debugger para que te muestre la cadena de texto sin las comillas adicionales en los Autos?, eso no es posible, te muestra el valor compilado.

Saludos!








TrashAmbishion

Tienes toda la razón dejame lanzarte una curva que me tiene haciendo swing hace 2 horas.. y ya no tengo cintura, jeje

Estoy tratando de hacer mi propio launcher para el BF3, para ver que linea de comando tengo que ejecutar capture el juego ya abierto y veo esto:

"D:\Juegos\BF3\Redirector.exe" bf3lan://lxdlyk1vzgugtvaglu9yawdpbl9ob0fwcezvy3vzic1vbmxpbmvfbnzpcm9ubwvudcbwcm9kic1sb2dpblrva2vuidqtoc0xns0xni0ymy00miatqxv0afrva2vuidqtoc0xns0xni0ymy00miatcmvxdwvzdfn0yxrlifn0yxrlx0nsywltumvzzxj2yxrpb24glxjlcxvlc3rtdgf0zvbhcmftcyaipgrhdgegchv0aw5zcxvhzd1cimzhbhnlxcigz2ftzwlkpvwimjk3ofwiihblcnnvbmfyzwy9xcixmdawmfwiigxldmvsbw9kzt1cim1wxci+pc9kyxrhpij8mtaumjiumi4yndb8ahr0cdovlzewljiyljiumjqwl2jhbm5lci5wbmd8otewfdi1ng==/

A su vez todo ese sin sentido abre otro proceso:

"D:\Juegos\BF3\LanBf3.exe" -webMode MP -Origin_NoAppFocus -onlineEnvironment prod -loginToken 4-8-15-16-23-42 -AuthToken 4-8-15-16-23-42 -requestState State_ClaimReservation -requestStateParams "<data putinsquad=\"false\" gameid=\"2978\" personaref=\"10000\" levelmode=\"mp\"></data>"

Y todo ok, puedo jugar sin problemas esto es conectado a un server local...

El sin sentido es BASE64:

-webMode MP -Origin_NoAppFocus -onlineEnvironment prod -loginToken 4-8-15-16-23-42 -AuthToken 4-8-15-16-23-42 -requestState State_ClaimReservation -requestStateParams "<data putinsquad=\"false\" gameid=\"2978\" personaref=\"10000\" levelmode=\"mp\"></data>"|10.22.2.240|http://10.22.2.240/banner.png|910|256

Yo paso ese mismo sin sentido a esa aplicacion desde mi aplicación en VB.NET y el Redirector me da un error decodificando el BASE64, que puede estar pasando, lo curioso es que me estaba funcionando sin problemas cambie de Windows 8 a Windows 10 y empezó todo esto..

Esta es la línea que pongo:

Código (vbnet) [Seleccionar]

parametros = "LXdlYk1vZGUgTVAgLU9yaWdpbl9Ob0FwcEZvY3VzIC1vbmxpbmVFbnZpcm9ubWVudCBwcm9kIC1sb2dpblRva2VuIDQtOC0xNS0xNi0yMy00MiAtQXV0aFRva2VuIDQtOC0xNS0xNi0yMy00MiAtcmVxdWVzdFN0YXRlIFN0YXRlX0NsYWltUmVzZXJ2YXRpb24gLXJlcXVlc3RTdGF0ZVBhcmFtcyAiPGRhdGEgcHV0aW5zcXVhZD1cImZhbHNlXCIgZ2FtZWlkPVwiMjk3OFwiIHBlcnNvbmFyZWY9XCIxMDAwMFwiIGxldmVsbW9kZT1cIm1wXCI+PC9kYXRhPiJ8MTAuMjIuMi4yNDB8aHR0cDovLzEwLjIyLjIuMjQwL2Jhbm5lci5wbmd8OTEwfDI1Ng=="

                    Process.Start("D:\Juegos\BF3\Redirector.exe", " bf3Lan://" & parametros)


Y nada me da el error que te dije anteriormente

Eleкtro

#5
Cita de: TrashAmbishion en  9 Agosto 2016, 03:47 AM"D:\Juegos\BF3\Redirector.exe" bf3lan://lxdlyk1vzgugtvaglu9yawdpbl9ob0fwcezvy3vzic1vbmxpbmvfbnzpcm9ubwvudcbwcm9kic1sb2dpblrva2vuidqtoc0xns0xni0ymy00miatqxv0afrva2vuidqtoc0xns0xni0ymy00miatcmvxdwvzdfn0yxrlifn0yxrlx0nsywltumvzzxj2yxrpb24glxjlcxvlc3rtdgf0zvbhcmftcyaipgrhdgegchv0aw5zcxvhzd1cimzhbhnlxcigz2ftzwlkpvwimjk3ofwiihblcnnvbmfyzwy9xcixmdawmfwiigxldmvsbw9kzt1cim1wxci+pc9kyxrhpij8mtaumjiumi4yndb8ahr0cdovlzewljiyljiumjqwl2jhbm5lci5wbmd8otewfdi1ng==/

parametros = "LXdlYk1vZGUgTVAgLU9yaWdpbl9Ob0FwcEZvY3VzIC1vbmxpbmVFbnZpcm9ubWVudCBwcm9kIC1sb2dpblRva2VuIDQtOC0xNS0xNi0yMy00MiAtQXV0aFRva2VuIDQtOC0xNS0xNi0yMy00MiAtcmVxdWVzdFN0YXRlIFN0YXRlX0NsYWltUmVzZXJ2YXRpb24gLXJlcXVlc3RTdGF0ZVBhcmFtcyAiPGRhdGEgcHV0aW5zcXVhZD1cImZhbHNlXCIgZ2FtZWlkPVwiMjk3OFwiIHBlcnNvbmFyZWY9XCIxMDAwMFwiIGxldmVsbW9kZT1cIm1wXCI+PC9kYXRhPiJ8MTAuMjIuMi4yNDB8aHR0cDovLzEwLjIyLjIuMjQwL2Jhbm5lci5wbmd8OTEwfDI1Ng=="

                   Process.Start("D:\Juegos\BF3\Redirector.exe", " bf3Lan://" & parametros)


No se, lo que planteas requiere conocimiento de ese juego en específico o más bien de como trabaja el tal proceso "Redirector.exe", de todas formas deduzco que el fallo simplemente es que no le estás pasando los parámetros correctos, fíjate bien, te falta pasarle el caracter del final "/" el cual delimita el string Base64...

Código (vbnet) [Seleccionar]
Dim base64 As String =
   "LXdlYk1vZGUgTVAgLU9yaWdpbl9Ob0FwcEZvY3VzIC1vbmxpbmVFbnZpcm9ubWVudCBwcm9kIC1sb2dpblR" &
   "va2VuIDQtOC0xNS0xNi0yMy00MiAtQXV0aFRva2VuIDQtOC0xNS0xNi0yMy00MiAtcmVxdWVzdFN0YXRlIF" &
   "N0YXRlX0NsYWltUmVzZXJ2YXRpb24gLXJlcXVlc3RTdGF0ZVBhcmFtcyAiPGRhdGEgcHV0aW5zcXVhZD1cI" &
   "mZhbHNlXCIgZ2FtZWlkPVwiMjk3OFwiIHBlcnNvbmFyZWY9XCIxMDAwMFwiIGxldmVsbW9kZT1cIm1wXCI+" &
   "PC9kYXRhPiJ8MTAuMjIuMi4yNDB8aHR0cDovLzEwLjIyLjIuMjQwL2Jhbm5lci5wbmd8OTEwfDI1Ng=="

Using p As New Process()

   With p.StartInfo
       .FileName = "D:\Juegos\BF3\Redirector.exe"
       .Arguments = String.Format("bf3lan://{0}/", base64)
       .WorkingDirectory = Path.GetDirectoryName(.FileName)
       ' .RedirectStandardError = True
       ' .RedirectStandardOutput = True
   End With

   p.Start()
   p.WaitForExit(Timeout.Infinite)

End Using


Saludos








TrashAmbishion

OMG  :o  :o  :o

Para empezar no sabia que el BASE64 lo define ese caracter /

No obstante estaba usando la funcion nativa del VB.NET y noc porque no le añade ese caracter me devuelve la STRING que te puse sin él, eso es normal ?


Eleкtro

#7
Cita de: TrashAmbishion en  9 Agosto 2016, 17:26 PMPara empezar no sabia que el BASE64 lo define ese caracter /

No obstante estaba usando la funcion nativa del VB.NET y noc porque no le añade ese caracter me devuelve la STRING que te puse sin él, eso es normal ?

Si, es normal, tienes un concepto claro del formato de Base64, no confundas mis palabras. Lo que intento decirte es que el parámetro "bf3lan" que le pasas al "Redirector.exe" usa los caracteres "//" para indicar el inicio del string Base64 y el caracter "/" para indicar el final del string Base64 (bueno, en realidad usará "==/" por que el caracter individual "/" también se genera en Base64), no se por que lo hará, pero lo hace.

Es decir:
bf3lan://BASE64==/

Pero tú le estabas pasando esto:
bf3lan://BASE64==

Saludos








TrashAmbishion

Lo pruebo hoy y te digo.

Salu2 y gracias !!