本文針對 Genero 初學者說明一個容易忽略卻非常重要的觀念:在使用 CHAR 型別變數時,務必搭配 CLIPPED。
問題:多餘的空白
CHAR 是固定長度的字串型別,若宣告為 CHAR(20),即使實際內容只有 5 個字元,剩餘的 15 個位置仍會以空白字元填滿。當你在串接這類變數時,若未使用 CLIPPED,多餘的空白就會一併帶入結果。
例如,以下程式碼會在姓名之間產生不預期的空白:
LET full_name = first_name, " ", last_name
解決方式:加上 CLIPPED
正確的寫法是在每個 CHAR 變數後加上 CLIPPED,先去除尾端空白再進行串接:
LET full_name = first_name CLIPPED, " ", last_name CLIPPED
其他常見的遺漏場景
除了字串串接,以下幾種情況也經常忘記加上 CLIPPED,且後果往往不那麼直觀:
1. ComboBox 項目
若在新增 ComboBox 項目時未使用 CLIPPED,存入的 key 值會帶有尾端空白,導致之後比對選取值時無法正確識別:
# 錯誤:key 值含有尾端空白
CALL ui.ComboBox.addItem(rec.code, rec.desc)
# 正確:去除尾端空白再加入
CALL ui.ComboBox.addItem(rec.code CLIPPED, rec.desc CLIPPED)
2. 檔案操作
在檔案路徑或檔名中帶有尾端空白,可能導致檔案複製失敗,或建立出含有空白的怪異檔名:
# 正確:確保路徑字串不含尾端空白
CALL os.Path.copy(source_filename CLIPPED, dest_filename CLIPPED)
CHAR 與 STRING 的差異
STRING 型別是可變長度字串,不存在尾端空白填補的問題,因此不需要 CLIPPED。但 CHAR 型別的變數幾乎在所有需要精確比對或傳遞的場合,都應該加上 CLIPPED。
養成對 CHAR 變數一律加上 CLIPPED 的習慣,可以避免許多難以察覺的細微錯誤。
原文:https://4js.com/ask-reuben/ig-244/
· 有任何 Genero 技術問題或翻譯疑問,歡迎來信
support@t100.app