我知道我们可以用以下内容解析CSV行(“;”分隔符):

delim = ';'
myline="i;want;to;know;what;love;is"
parse var myline w1 (delim) w2 (delim) w3 (delim) w4 (delim) w5 (delim) w6 (delim) w7
say w1 w2 w3 w4 w5 w6 w7

我想知道是否有一种方法可以简化“w#(delim)”的迭代,以便执行以下操作:
parse var myline w1 (delim) w2 (delim) ... (delim) w6 (delim) w7
/* then we will have all w1 to w7 defined

我可以用某个数组做一个函数来做到这一点,但是否有可能在rexx上进行,我只是想知道

谢谢

最佳答案

当然,如果您真正想要的是名为nw1,... w2wn变量:

do i = 1 by 1 while myline <> ''
    parse var myline word (delim) myline
    interpret "w" || i "= word"
end

但是Rexx-y做到这一点的方法是使用“干数组”:
delim = ';'
do i = 1 by 1 while myline <> ''
    parse var myline w.i (delim) myline
end
w.0 = i-1

甚至:
do i = 1 by 1 while myline <> ''
    parse var myline w.i ';' myline
end
w.0 = i-1

完成后,您将拥有一个w.数组,该数组在w.0中进行计数,在nw.1等中通过w.2进行计数。这样做更好,因为Rexx对w.n之后的部分有特殊的处理:您可以使用任何变量,而将使用其值代替。因此,打印所有这些单词就是:
do i = 1 to w.0
    say w.i
end

或重新组装它们只是:
line = ""
do i = 1 to w.0
    line = line || w.i || ';'
end

关于parsing - Rexx-解析CSV行(“;”分隔符),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15437494/

10-10 07:36