从Progress / OpenEdge

时间:2017-03-21 15:49:57

标签: progress-4gl openedge

我有下面的代码片段(正如之前的Stack Overflow回答... Deleting all special characters from a string in progress 4GL中所建议的那样),它试图从字符串中删除所有扩展字符,以便我可以将其传输到客户的系统不接受任何扩展字符。

  

执行v-int = 128到255:

  assign v-string = replace(v-string,chr(v-int),"").
     

端。

它完美地处理了一个例外(这让我担心可能还有其他一些我没有抓到)。当它达到255时,它将替换字符串中的所有'y'。

如果我执行以下操作......

  

显示chr(255)= chr(121)。 / * 121是y * /

的asc代码

我的结果是真的。

因此,如果我做以下事情......

  

显示替换(“这真的很奇怪”,chr(255),“”)。

我得到以下结果:

  

这很奇怪

我已经确认'y'是受运行以下内容影响的唯一字符:

  

def var v-string as char init“abcdefghijklmnopqrstuvwxyz”。   def var v-int as int。

     

执行v-int = 128到255:

     

assign v-string = replace(v-string,chr(v-int),“”)。

     

端。

     

显示v-string。

结果如下:

  

abcdefghijklmnopqrstuvwxz

我知道我可以通过从范围中移除255来解决这个问题,但我想了解为什么会发生这种情况。

这是一个角色整理设置问题还是我错过了一些更简单的东西?

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

这是一个错误。这是关于它的Progress Knowledge Base文章:

http://knowledgebase.progress.com/articles/Article/000046181

解决方法是在CHR(255, "UTF-8", "1252") 语句中指定代码页,如下所示:

def var v-string as char init "abcdefghijklmnopqrstuvwxyz". def var v-int as int.

do v-int = 128 to 255:

assign v-string = replace(v-string, chr(v-int, "UTF-8", "1252"), "").

end.

display v-string.

这是你的例子:

{{1}}

你现在应该看到' y'在输出中。

答案 1 :(得分:3)

这似乎是一个错误!

  

当替换字符串中的字符CHR(255)(ÿ)时,REPLACE()函数返回意外的结果。

     

REPLACE()函数修改目标字符的值,但另外它会更改字符串中出现的任何字符“Y”和“y”。

     

此行为似乎只影响角色ÿ。 REPLACE()正确更改了其他字符。

     

使用默认代码页ISO-8859-1

Link to knowledgebase