本文針對 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