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

Fel*_*ice 2 progress-4gl openedge

我有一个从 csv 文件中读取的电子邮件地址列表,这些地址有时用逗号分隔,有时当该人拥有超过 1 个电子邮件地址时用分号分隔。

例子:

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 
Run Code Online (Sandbox Code Playgroud)

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

DEFINE VARIABLE emailString AS CHARACTER NO-UNDO.
DEFINE VARIABLE iEmailCount AS INTEGER.
Run Code Online (Sandbox Code Playgroud)

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

iEmailCount = NUM-ENTRIES (emailString, ";").
iEmailCount = NUM-ENTRIES (emailString).
Run Code Online (Sandbox Code Playgroud)

但我该怎么说呢...

iEmailCount = Num_ENTRIES(emailString,";" OR ",").
Run Code Online (Sandbox Code Playgroud)

The*_*per 5

您必须按每个分隔符来分解该行。循环遍历一个分隔符,然后循环第二个:

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.
Run Code Online (Sandbox Code Playgroud)

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

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.
Run Code Online (Sandbox Code Playgroud)