在每个循环中使用目录列出文件

时间:2013-01-21 04:40:53

标签: j

我已经阅读了一些示例代码,但我只是不明白如何使用类似foreach的循环来遍历文件集合。以下是我获取文件列表的方法:

ls=:0 dir '*.*'

我可以回应这一点,它运作正常。但我需要做的是使用某种循环一次处理每个文件1。所以像:

ls=:0 dir '*.*'
foreach (file in ls) {
 do something(file)
 do something else.. so on
}
每个循环的手册中的

看起来像这样:

smoutput each i.10

显然没用,它打印1到10,我不知道如何修改它以使用我的目录列表。

2 个答案:

答案 0 :(得分:2)

each关键字用于单行循环。有for loop,您可以在定义的函数(或动词)中使用。

示例:

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

for_.变体可以说是最有用的。变量file的名称在下划线和句点之间。要记住的重要一点是,for循环将给出数组中出现的每个项目,因此如果ls是一个盒装字符串数组,则每个file将显示为一个盒装字符串。

答案 1 :(得分: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