如何在 openEdge 中创建逗号分隔值

how to create comma separated value in progress openEdge

这里是新手问题。

我需要创建一个列表。但我的问题是不以逗号开头的最佳方法是什么?

例如:

output to /usr2/appsrv/test/Test.txt.
def var dTextList as char.
for each emp no-lock:
  dTextList = dTextList + ", " + emp.Name.
end.
put unformatted dTextList skip.
output close.

那么我的最终结果是

, jack, joe, brad

去掉前导逗号的最佳方法是什么?

谢谢

这是一种方法:

ASSIGN 
   dTextList = dTextList + ", " WHEN dTextList > ""
   dTextList = dTextList + emp.Name 
   .

我经常

ASSIGN dTextList = dTextList + (if dTextList = '' then '' else ',') + emp.name.

这没有任何条件逻辑:

for each emp no-lock:
  csv = csv + emp.Name + ",".
end.
right-trim( csv, "," ).

或者您可以这样做:

for each emp no-lock:
  csv = substitute( "&1,&2" csv, emp.Name ).
end.
trim( csv, "," ).

这还具有很好地处理未知值(? 值...)的优势

TRIM() 修剪两侧,LEFT-TRIM() 仅修剪前导字符,RIGHT-TRIM() 修剪尾随字符。

我想到了(我的同事做到了)他想到了这个:

dTextList = substitute ("&1&3&2", dTextList, emp.Name, min(dTextList,",")).

但是很高兴看到各种方法可以做到这一点。谢谢大家的回复

我的香草清单:

output to /usr2/appsrv/test/Test.txt.
def var dTextList as char no-undo.
for each emp no-lock:
  dTextList = substitute( "&1, &2", dTextList, emp.Name )
end.
put unformatted substring( dTextList, 3 ) skip.
output close.
  1. 替换防止未知数清除列表
  2. 在循环外保持列表定界符检查
  3. 通常保留列表定界符前缀,除非确实需要像输出时那样使用前缀

经常使用分隔列表时,您可能需要考虑创建一个列表 class 以从您的代码中删除这种不相关的噪音,这样您就可以在功能上仅将项目添加到列表并导出列表而无需每次都在修改这些细节。

这导致没有前导逗号(分隔符)并且没有摆弄 trim/substring/etc

def var cDelim as char.
def var dTextList as char.
cDelim = ''.
for each emp no-lock:
  dTextList = dTextList + cDelim + emp.Name.
   cDelim = ','.
end.