3

関連する入力位置と出力位置を持つように変更しているCshellスクリプトがあります。機能はすべて、次のようにforeachループで発生します。

set INPUT_LOCATION_LIST = "loc1 loc2 loc3 loc4"
foreach location ($INPUT_LOCATION_LIST)
#***Do some stuff ***
end

入力リストとは異なる値の出力リストが必要ですが、foreachループを反復するたびにトラバースします。foreachの男は単に持っています

foreach name (wordlist)

定義として。したがって、1つだけを扱います。それを処理することについての私の現在の考えは、ワードリストに入力と出力の両方の場所を含めてから、スクリプトでそれを解析することです。

set INPUT_LOCATION_LIST = "loc1;out1 loc2;out2 loc3;out3 loc4;out4"

だから誰かがそれを行うためのより良い方法があるかどうか疑問に思っています。

4

2 に答える 2

5

foreach配列のように扱い、次を使用することで、一方のリストを使用して、もう一方のリストを反復処理できますshift

set INPUT_LOCATION_LIST = "loc1 loc2 loc3 loc4"
set OUT_LIST = (out1 out2 out3 out4)

foreach location ($INPUT_LOCATION_LIST)
    do_something $location $OUT_LIST[1]
    shift OUT_LIST
end
于 2010-09-15T00:27:20.670 に答える
1

私は普段cshを使っていませんが、あなたの質問が私の目に留まりました。おそらくより少ないステップで解決策がありますが、この種のことは私のバージョンのcshで機能しました:

foreach location ($INPUT_LOCATION_LIST)
    set one_word_with_space = ${location:s/;/ /}
    set loc_out = ($one_word_with_space)
    set loc = ${loc_out[1]}
    set out = ${loc_out[2]}
    ...
end

基本的な考え方は、セミコロンで区切られた文字列をスペースで区切られた文字列に変更し、それを配列に解析することです。

于 2010-09-15T06:20:17.967 に答える