2013-04-02 37 views
5

Tôi có một nghi ngờ rất cơ bản trong vb kịch bản:Về sử dụng dấu ngoặc kép trong VBScript

Msgbox "This is myName" ' This works fine 

Msgbox "This is "myName"" ' This gives an error 

Msgbox "This is ""myName""" 'This works fine 

Câu hỏi của tôi là nếu tôi cần phải tiết kiệm (trong một biến) hoặc hiển thị chuỗi với dấu ngoặc kép tại sao tôi cần phải sử dụng một dấu ngoặc kép doble hai lần cho từ hoặc cụm từ. Việc sử dụng một dấu ngoặc kép phổ biến không có nghĩa là tôi muốn hiển thị toàn bộ điều hoặc có thể được lưu dưới dạng chuỗi trong biến?

Trả lời

1

Dấu ngoặc kép trong VBScript kèm theo một chuỗi. Nếu bạn chèn một qoute đôi duy nhất bên trong một chuỗi nó kết thúc chuỗi sớm và phần còn lại gây ra lỗi. Vì lý do đó bạn phải thoát khỏi các dấu ngoặc kép bên trong một chuỗi, có thể được thực hiện bằng cách tăng gấp đôi chúng. Đó là lý do tại sao lệnh 3 rd của bạn hoạt động trong khi 2 nd của bạn không hoạt động.

1

Chuỗi ký tự phải được phân tách để tách biệt những gì bạn có trong chuỗi từ bên ngoài. Các dấu phân cách chuỗi trong VBScript là "(double quote). Các ngôn ngữ khác sử dụng" quá, một số có '(quote đơn) như là một thay thế hoặc một dấu phân cách với một ngữ nghĩa hơi khác nhau.

Để chứa dấu tách trong chuỗi ký tự, nó phải được thoát (được đánh dấu là không có nghĩa là 'kết thúc' hoặc 'bắt đầu' của chuỗi. Dấu vị trí thoát cho "trong chuỗi ký tự là" .cho "" - trong VBScript . ngôn ngữ khác sử dụng \" để thoát khỏi một dấu nháy kép.

Vì vậy

Msgbox "This is ""myName""" 'This works fine 
x = "This is ""myName""" 

là đúng VBScript nếu bạn biết những gì để hiển thị (hoặc cửa hàng) This is "myName".

11

Trong VBScript, xâu là được bao quanh bởi dấu ngoặc kép ("). Đây là những gì ví dụ đầu tiên của bạn hiển thị:

Msgbox "This is myName" ' This works fine 

Tuy nhiên, nếu bạn muốn bao gồm một báo ký tự hai bên của chuỗi chữ của bạn, bạn đã có một vấn đề, bởi vì VBScript đang xảy ra để giải thích thứ hai tăng gấp đôi ký tự trích dẫn nó tìm thấy như là dấu hiệu kết thúc của chuỗi chữ. Đây là ví dụ thứ hai của bạn cho thấy:

Msgbox "This is "myName"" ' This gives an error 
        ^ ' because it prematurely terminates the string here 
          ' and doesn't know what to do with the trailing " 

May mắn thay, có một lối thoát hiểm. Nó liên quan đến việc trốn thoát ký tự trích dẫn kép với một ký tự khác, cho biết rằng VBScript nên xử lý nó dưới dạng ký tự ngoặc kép, chứ không phải ký tự "kết thúc chuỗi ký tự" huyền diệu. Nó chỉ như vậy xảy ra rằng ký tự thoát VBScript sử dụng là một nhân vật báo giá kép. Đây là những gì ví dụ thứ hai của bạn hiển thị:

Msgbox "This is ""myName""" 'This works fine 
  • Bạn bắt đầu chuỗi với một đơn đúp báo giá, cho thấy sự khởi đầu của một chuỗi chữ.
  • Sau đó, bạn muốn có một ký tự trích dẫn kép được nhúng, do đó bạn sử dụng hai ký tự. Đây là nơi bắt đầu thoát: bạn thoát ký tự dấu ngoặc kép với một ký tự trích dẫn kép khác.
  • Sau đó, bạn thực hiện lại điều đó.
  • Cuối cùng, bạn chấm dứt toàn bộ chuỗi ký tự bằng một ký tự trích dẫn kép khác.

Các ngôn ngữ khác thường sử dụng dấu gạch chéo ngược (\) làm ký tự thoát. Điều đó có thể giúp mọi thứ dễ nhìn hơn. Giả sử VBScript sử dụng một dấu gạch chéo là ký tự thoát chứ không phải là một dấu nháy kép, mã của bạn sẽ trông như thế này:

Msgbox "This is \"myName\"" ' doesn't work in VBScript; example only 

Nếu cú ​​pháp này làm phiền bạn, bạn có thể khai báo một hằng số cho dấu nháy kép và sử dụng mỗi lần:

Const Quote = """" 

' ... later in the code ... 

Msgbox "This is " & Quote & "myName" & Quote 
2

Mỗi ngôn ngữ có escape character riêng. Bởi cơ hội hay không, trong VB/VBS nó là dấu ngoặc kép. Và cũng có thể do tình cờ hay không, chúng tôi chỉ có thể nhúng dấu ngoặc kép trong chuỗi chữ. Chúng tôi không thể nhúng các ký tự đặc biệt khác dưới dạng Tab chẳng hạn.

Tuy nhiên, việc sử dụng ký tự thoát VB/VBS đơn giản hóa việc viết mã của chúng tôi.

str = """D:\path\to\xyz.exe"" ""arg 1"" ""arg 2""" 
WScript.Echo str ' "D:\path\to\xyz.exe" "arg 1" "arg 2" 

str = Chr(34) & "D:\path\to\xyz.exe" & Chr(34) & " " _ 
    & Chr(34) & "arg 1" & Chr(34) & " " & Chr(34) & "arg 2" & Chr(34) 
WScript.Echo str ' "D:\path\to\xyz.exe" "arg 1" "arg 2" 

str = Join(Array("", "D:\path\to\xyz.exe", " ", "arg 1", " ", "arg 2", ""), Chr(34)) 
WScript.Echo str ' "D:\path\to\xyz.exe" "arg 1" "arg 2" 

Nhưng cá nhân tôi thích sử dụng Replace vì nó làm cho mã của tôi dễ đọc hơn.

str = Replace("'D:\path\to\xyz.exe' 'arg 1' 'arg 2'", Chr(39), Chr(34)) 
WScript.Echo str ' "D:\path\to\xyz.exe" "arg 1" "arg 2" 

Bạn có thể sử dụng Replace (nếu thuận tiện cho bạn) và các ký tự đặc biệt còn lại.

str = Replace(Replace("A|B|C!1|2|3", "!", vbNewLine), "|", vbTab) 
WScript.Echo str 
'A B C 
'1 2 3 
Các vấn đề liên quan