在VFP中等號 = 和雙等號 = = 代表的意義是不同的
雖然兩者在比較數字時是沒有任何差別的
但如果是在比較字串時所代表的意義就完全是不一樣的
*需要注意的是比較的兩邊資料類型必須相同,即使是 1="1" 程式也會跳錯誤
且兩邊都不能是.NULL. ,如果有任何一邊是.NULL. ,程式也只會回傳.NULL.
ex
*字串部分
?"ABCD" = "ABC" 結果: .T.
?"ABC" = "ABCD" 結果: .F.
?"ABCD" == "ABC" 結果: .F.
*數字部分
?1=2 結果: .F.
?1==2 結果: .F.
這邊可以直觀看出=和= =在比較字串上的不同
(等號=)在比對字串意義上是代表 由(等號=)的右邊字串 從左邊字串 的最左邊開始比對,只要在右邊字串結束前都相同就是.T.
(雙等號==)在比對字串意義上是代表 必須左右兩邊的字串完全相同才是.T.
(包含空白,長度,內容都要一樣)
*然而因為(等號=)的比對方式,這邊會衍生出一種較特殊的狀況
?"ABCD" = "" 結果: .T.
不管(空字串"")去和任何字串去做等號相比 (空字串"" 在等號右邊的情況下), 都會返回.T.
這邊其實也可以看成不管任何字串的最左邊都有空字串在那邊,所以不管怎麼比對都應該會是.T.
----------------------------------------------------------------------
再補充一些東西
(SET EXACT ON) 指令
這項指令可以在功能選項 Tools -> Options -> Data 裡面可以做調整
預設上是關閉(OFF)的狀態,可以在這邊將其打開
也可以打在程式碼上來開啟功能
ex
SET EXACT ON
?"ABCD" = "ABC" 結果: .F.
?"ABC" = "ABCD" 結果: .F.
?" ABC" = "ABC" 結果: .F.
?"ABC" = "ABC " 結果: .T.
?"ABC " = "ABC" 結果: .T.
SET EXACT ON: 代表將(等號=)兩邊進行等長比對,而比對的方式是將兩邊字串較短方的'尾部'補上空白再進行比對
由上面這些例子可以看出一些端倪
第一個 "ABCD" = "ABC" 在經過 SET EXACT ON 後結果從原本的 .T. 變成 .F.
這邊其實可以看成是 "ABCD" == "ABC " 這樣就很能很容易看出結果為 .F.
而這項指令對於(雙等號==)是沒有影響的,一樣必須兩邊字串完全相同才是 .T.
(包含空白,長度,內容都要一樣)
如果要關閉掉這項功能,也只要在程式碼打上 SET EXACT OFF 即可
沒有留言:
張貼留言