2010-05-31 9 views
45

ho questo codice:Aggiunta di citazioni in una stringa in VBScript

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

Dopo l'esecuzione di esso, il valore di g è abcd xyz.

Tuttavia, voglio virgolette attorno al valore di a in g. Dopo aver eseguito il codice, g dovrebbe essere abcd "xyz".

Come posso realizzare questo?

risposta

79

Si può sfuggire raddoppiando le quotazioni

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

o scrivere un esplicito chr() chiamata

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

un "alla fine manca – sushant

+1

No, il codice sembra che vada bene. –

+0

ottenuto. Grazie mille – sushant

15

Devi usare le virgolette doppie doppie per sfuggire alle virgolette (lol):

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

Escaping un carattere speciale con se stesso non è insolito, vede doppio backslash nei linguaggi in stile C, o doppi apici singoli SQL – Tomalak

+1

+1 Haha, questo ha reso la mia giornata! –

+0

molto divertente :) Si. Questa è la strada da percorrere in VBS –

0

Puoi fare come:

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

Oppure:

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

solito faccio questo:

Const Q = """" 

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

Se avete bisogno di avvolgere le stringhe tra virgolette più spesso nel codice e trovare l'approccio di cui sopra rumoroso o illeggibile, è può anche racchiuderlo in una funzione:

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

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

Ho trovato la risposta per utilizzare doppio e triplo le virgolette sono insoddisfacenti. Ho usato un DO annidato ... LOOP per scrivere un segmento di codice ASP. Ci sono ripetute virgolette all'interno della stringa. Quando ho fatto funzionare il codice:

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

l'uscita era: < `asp: RectangleHotSpot inferiore =" 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) &"/>" 

L'output:

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

chr (34) funziona, ma così fa sfuggire le doppie virgolette. il tuo esempio "funzionante" include anche la fuga, dimostrando che funziona. –

+1

Stack Overflow NON è un forum! – Doorknob

+0

I numeri nel codice di uscita provenivano dai valori assegnati alle variabili. il codice è solo uno snippet. L'intero output era un file di 178 KB le citazioni semplici funzionano, ma non per quello di cui avevo bisogno. Non comincio a capire perché, ma ciò non cambia il fatto che non ha funzionato come dovrebbe nel mio caso. Stavo scrivendo l'output su un file. Potrebbe essere che più fughe all'interno di cicli nidificati utilizzino un codice interpretato per scriverne un altro mentre scrivere su un file era troppo per l'interprete VBscript. –

4

Il modo tradizionale per specificare le citazioni è quello di utilizzare Chr(34).Questo è resistente agli errori e non è un abominio

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

Non credo di poter migliorare queste risposte come le ho usate tutte, ma la mia preferenza è dichiarare una costante e usarla come può essere un vero dolore se si ha una lunga stringa e si cerca di accomodare con il numero corretto di virgolette e fare un errore. ;)

0

Ho progettato un approccio semplice utilizzando le virgolette singole durante la formazione delle stringhe e quindi chiamando una funzione che sostituisce le virgolette singole con virgolette doppie.

Ovviamente questo approccio funziona fintanto che non è necessario includere virgolette singole all'interno della stringa.

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 

...

Spero che questo aiuti.