openedge - 使用带有多个可能分隔符的 num-entries()

标签 openedge progress-4gl

我有一个电子邮件地址列表,我正在从一个 csv 文件中读取这些地址,当此人拥有多个电子邮件地址时,有时用逗号分隔,有时用分号分隔。

例子:

Pin email_address
11  heidi@gmail.com,hh@yahoo.com
12  tom@osu.edu;TQ@gmail.com
13  lisa@yahoo.com
14  linda@me.com;llewis@gmail.com,lvlv@yahoo.com 

假设我正在将这些读入一个变量并使用另一个变量对每个人进行计数:

DEFINE VARIABLE emailString AS CHARACTER NO-UNDO.
DEFINE VARIABLE iEmailCount AS INTEGER.

我想计算这个人的电子邮件数量。我知道我可以使用此语法分别计算分号之间和逗号之间的条目数。

iEmailCount = NUM-ENTRIES (emailString, ";").
iEmailCount = NUM-ENTRIES (emailString).

但是我怎么能最好地说...

iEmailCount = Num_ENTRIES(emailString,";" OR ",").

最佳答案

您必须按每个分隔符来分隔行。遍历一个定界符,然后是第二个:

DEFINE VARIABLE emailString AS CHARACTER NO-UNDO.
DEFINE VARIABLE iEmailCount AS INTEGER NO-UNDO.
DEFINE VARIABLE iLoop AS INTEGER NO-UNDO.

iEmailCount = NUM-ENTRIES(emailString).
DO iLoop = 1 TO NUM-ENTRIES(emailString):  /* Loop through comma delimiters */
    iEmailCount = iEmailCount + NUM-ENTRIES(ENTRY(iLoop, emailString), ";") - 1.  /* Sum by semicolon delimiter */
END.

如果您确定分号只会作为分隔符出现在数据中,您可以将其替换为逗号。然后是对逗号条目数量的简单统计:

DEFINE VARIABLE emailString AS CHARACTER NO-UNDO INITIAL "linda@me.com;llewis@gmail.com,lvlv@yahoo.com".
DEFINE VARIABLE iEmailCount AS INTEGER NO-UNDO.

emailString = REPLACE(emailString, ";", ",").
iEmailCount = NUM-ENTRIES(emailString).

MESSAGE "Email string: " emailString SKIP 
        "Count: " iEmailCount VIEW-AS ALERT-BOX.

关于openedge - 使用带有多个可能分隔符的 num-entries(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72748441/

相关文章:

ssl - 进度错误 54 - 无法获取本地颁发者证书

openedge - 如何重新抛出进行中的捕获异常 4gl?

datetime - 如何为 Progress 4GL 查询中的每个循环添加日期条件?

progress-4gl - 使用 Break by 进行中的关键字 4GL

progress-4gl - 如何创建正在进行中的逗号分隔值 openEdge

progress-4gl - 如何在FOR EACH的BY/BREAK BY关键字中添加IF THEN ELSE?

cryptography - Progress 10.1C 4GL编码功能

set - OpenEdge 10.2A - INPUT THROUGH 设置在 Windows 10 上的 Windows Update 1703 后不起作用

openedge - 如果我们不删除对象句柄会发生什么?它如何影响?我们怎么看? - 进步 4GL

progress-4gl - 从临时表创建数据库表(通过代码)