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の方法は、「ステム配列」を使用することです。

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.0n単語が作成されます。これは、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 に答える