2010-05-31 8 views
45

que tienen este código:Adición de frases a una cadena en VBScript

a = "xyz" 
g = "abcd " & a 

Después de ejecutarlo, el valor de g es abcd xyz.

Sin embargo, quiero cotizaciones alrededor del valor de a en g. Después de ejecutar el código, g debe ser abcd "xyz" en su lugar.

¿Cómo puedo lograr esto?

Respuesta

79

Puede escapar con la duplicación de las cotizaciones

g="abcd """ & a & """" 

o escribir un explícito chr() llamada

g="abcd " & chr(34) & a & chr(34) 
+0

un "al final no se encuentra – sushant

+1

No, el código parece estar bien. –

+0

conseguido. Un montón de gracias – sushant

15

Tienes que utilizar comillas dobles para escapar de las comillas dobles (lol):

g = "abcd """ & a & """" 
+0

Escapar un carácter especial consigo mismo no es inusual, ver dobles barras invertidas en lenguajes de tipo C, o comillas simples dobles en SQL – Tomalak

+1

+1 ¡Haha, esto hizo mi día! –

+0

muy gracioso :) Sí. Ese es el camino a seguir en VBS –

0

Puede hacer como:

a="""xyz""" 
g="abcd " & a 

O:

a=chr(34) & "xyz" & chr(34) 
g="abcd " & a 
8

que suelo hacer esto:

Const Q = """" 

Dim a, g 
a = "xyz" 
g = "abcd " & Q & a & Q 

Si necesita para envolver las cadenas entre comillas con más frecuencia en el código y encontrar el enfoque anterior ruidoso o ilegible, también puede envolverlo en una función:

a = "xyz" 
g = "abcd " & Q(a) 

Function Q(s) 
    Q = """" & s & """" 
End Function 
-2

Encontré la respuesta al uso doble y triple comillas insatisfactorias Usé un DO ... LOOP anidado para escribir un segmento ASP de código. Hay comillas repetidas dentro de la cadena. Cuando me encontré con el código:

thestring = "<asp:RectangleHotSpot Bottom=""" & bottom & """ HotSpotMode=""PostBack"" Left="""& left & """ PostBackValue=""" &xx & "." & yy & """ Right=""" & right & """ Top=""" & top & """/>" 

la salida fue: < `asp: RectangleHotSpot Inferior =" 28

'Changing the code to the explicit chr() call worked: 

thestring = "<asp:RectangleHotSpot Bottom=""" & bottom & chr(34) & " HotSpotMode=""PostBack"" Left="""& left & chr(34) & " PostBackValue=""" &xx & "." & yy & chr(34) & " Right=""" & right & chr(34) & " Top=""" & top & chr(34) &"/>" 

La salida:

<asp:RectangleHotSpot Bottom="28" HotSpotMode="PostBack" Left="0" PostBackValue="0.0" Right="29" Top="0"/> 
+1

chr (34) funciona. Pero también lo hace escaparse de las comillas dobles. Su código de ejemplo superior no generará lo que afirme que sí; algo más estaba mal allí. Su ejemplo de "trabajo" incluso incluye el escape, demostrando que funciona. –

+1

Stack Overflow NO es un foro! – Doorknob

+0

Los números en el código de salida eran de los valores asignados a las variables. El código es solo un fragmento. Todo el resultado fue un archivo de 178 KB. Las citas individuales funcionan, pero no por lo que necesitaba. No empiezo a saber por qué, pero eso no cambia el hecho de que no funcionó como debería haberlo hecho en mi caso. Estaba escribiendo el resultado en un archivo. Podría ser que múltiples escapes dentro de los bucles anidados utilizando un código interpretado para escribir otro mientras se escribe en un archivo era demasiado para el intérprete de VBscript. –

4

La forma tradicional para especificar cotizaciones es usar Chr(34). Esto es resistente a errores y no es una abominación.

Chr(34) & "string" & Chr(34) 
0

No creo que pueda mejorar estas respuestas ya que las he usado todas, pero mi preferencia es declarar una constante y usar eso, ya que puede ser muy doloroso si tienes una cuerda larga e intentas acomodar con el número correcto de citas y cometer un error. ;)

0

Diseñé un enfoque simple usando comillas simples al formar las cadenas y luego llamando a una función que reemplaza las comillas simples con comillas dobles.

Por supuesto, este enfoque funciona siempre que no necesite incluir comillas simples reales dentro de su cadena.

Function Q(s) 

    Q = Replace(s,"'","""") 

End Function 

...

user="myself" 
code ="70234" 
level ="C" 

r="{'User':'" & user & "','Code':'" & code & "','Level':'" & level & "'}" 
r = Q(r) 
response.write r 

...

Espero que esto ayude.

Cuestiones relacionadas