2

我知道我们可以用类似的东西解析一个 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 上本地实现,我只是想知道

谢谢

4

1 回答 1

12

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

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

但是 Rexx-y 的方法是使用“stem array”:

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以及, , ... 中的n单词直至. 这更好,因为 Rexx 对 : 后面的部分进行了特殊处理,您可以使用任何变量,并且将使用它的值来代替。所以打印所有这些词只是:w.1w.2w.n.

do i = 1 to w.0
    say w.i
end

或者重新组装它们只是:

line = ""
do i = 1 to w.0
    line = line || w.i || ';'
end
于 2013-03-15T22:29:07.200 回答