2

いくつかのサンプル コードを読みましたが、foreach のようなループを使用してファイル コレクションを反復処理する方法がわかりません。ファイルのリストを取得する方法は次のとおりです。

ls=:0 dir '*.*'

私はこれをエコーすることができ、うまくいきます。しかし、私がする必要があるのは、ある種のループを使用して一度に各ファイルを 1 つずつ処理することです。次のようなもの:

ls=:0 dir '*.*'
foreach (file in ls) {
 do something(file)
 do something else.. so on
}

マニュアルでは、 for each ループは次のようになります。

smoutput each i.10

1 から 10 まで表示されますが、これを変更して自分のディレクトリ リストを操作する方法がわかりません。

4

2 に答える 2

2

キーワードは、each単一行ループ用です。定義済みの関数 (または動詞) 内で使用できるforloopがあります。

例:

myFunction =: 3 : 0
    ls =. 1 dir '*.*'
    for_file. ls do.
        doSomething ;file
        doSomethingElse ;file
    end.
)

for_.バリアントは間違いなく最も便利です。変数の名前はfile、アンダースコアとピリオドの間にあります。覚えておくべき重要なことは、for ループは配列に表示される各項目を与えるため、lsがボックス化された文字列の配列である場合、それぞれfileが単一のボックス化された文字列として表示されるということです。

于 2013-01-21T15:15:32.577 に答える
0

このフォームのリストがおそらく必要です。

ls =: 1 dir '*.*'

これはファイルのリストであり、。のような文字のリストではありません0 dir '*.*'

eachこのリストで使用できます。例:

]ls =: 1 dir '*'
┌──────────┬──────────────┬──────────┬───────────┬───────┐
│build_defs│build_jconsole│build_libj│build_tsdll│jconfig│
└──────────┴──────────────┴──────────┴───────────┴───────┘

;# each ls  NB. number of characters for each filename
10 14 10 11 7
于 2013-01-21T23:18:40.523 に答える