如何在PROGRESS 4GL中检测韩文字符?
如何修改PROGRESS 4GL代码检测韩文字符
首先说明:你提供的原代码实际逻辑是检测输入中是否包含英文字母(a-z/A-Z,排除空格),并将m_error设为yes。要实现韩文字符检测,需要基于韩文的Unicode码点范围来调整判断逻辑。
韩文的Unicode主要覆盖以下几个区间:
- 韩文字母(Hangul Jamo):U+1100 至 U+11FF
- 韩文兼容字母(Hangul Compatibility Jamo):U+3130 至 U+318F
- 韩文字节(Hangul Syllables):U+AC00 至 U+D7AF
- 韩文字母扩展A(Hangul Jamo Extended-A):U+A960 至 U+A97F
- 韩文字母扩展B(Hangul Jamo Extended-B):U+D7B0 至 U+D7FF
修改后的代码如下:
PROCEDURE check_korean : DEFINE INPUT PARAMETER m_char AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER m_error AS LOGICAL NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE cp AS INTEGER NO-UNDO. m_error = NO. // 初始化默认无韩文字符 DO i = 1 TO LENGTH(m_char): // 按Unicode字符遍历,而非字节 cp = CODEPOINT(SUBSTRING(m_char, i, 1)) // 获取字符的Unicode码点 // 判断是否在韩文的Unicode范围内 IF (cp >= 0x1100 AND cp <= 0x11FF) OR (cp >= 0x3130 AND cp <= 0x318F) OR (cp >= 0xAC00 AND cp <= 0xD7AF) OR (cp >= 0xA960 AND cp <= 0xA97F) OR (cp >= 0xD7B0 AND cp <= 0xD7FF) THEN DO: m_error = YES. // 检测到韩文字符,标记状态 LEAVE. // 找到目标字符后退出循环 END. END. END PROCEDURE.
代码调整说明
- 遍历逻辑优化:原代码按字节(
"raw"参数)处理字符,改为按Unicode字符遍历,避免多字节韩文被拆分导致的误判。 - 替换判断方式:用
CODEPOINT函数获取字符的Unicode码点,替代原代码的ASC(仅获取单字节ASCII值),能准确识别韩文这类多字节字符。 - 韩文区间覆盖:包含所有常见韩文的Unicode范围,确保检测全面性。
- 状态初始化:默认
m_error为NO,仅在检测到韩文时切换为YES,符合常规逻辑。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

