获取 q 目录中的路径名文件

getting the path name files in a directory in q

我正在使用 q 获取该目录中列出的所有文件:

key `:Dname

然后尝试过滤掉以数字开头的那些:

key `:Dname like "[0-9]"

但是类似的部分不太管用。我也尝试了 get,因为我喜欢包含文件所在目录的路径。

如果你的文件名定义为

filename:`2019.01.20file.txt

您可以将此与使用 like 的模式进行比较,类似于您所做的:

filename like "[0-9]*"
  • "*" 是通配符,表示 [0-9]

  • 之后可以有任何内容
  • like 将字符串或符号与模式进行比较

因此,如果文件名以 0 到 9 之间的数字开头,则此行 return 为 1b。

另一种方法是将文件名的开头与 .Q.n 进行比较,后者是 0-9 的字符串。 这可以像这样实现:

first[string filename] in .Q.n
  • string 将符号转换为字符串 in 以将其与字符串进行比较。Q.n

根据你的情况,我推荐第一种方法。

q)key `:q
`README.txt`q.k`q.q`s.k`sp.q`w32
q)key[`:q] like "q*"
011000b
q)x where (x:key[`:q]) like "q*"
`q.k`q.q
q)x where not (x:key[`:q]) like "q*"
`README.txt`s.k`sp.q`w32

此方法 returns 布尔列表,指示每个文件是否以 "q":

开头
  • 使用not反转此列表的 1 和 0
  • 使用where到return布尔列表等于1的索引
  • 使用此列表
  • 索引到 key[`:q]

希望对您有所帮助

请记住,q 从右到左评估表达式。您在此处的代码将首先评估

`:Dname like "[0-9]"

并对结果应用 key

你想要更接近

的东西
key[`:Dname] like "[0-9]"

但要获得您想要的结果,您必须向您提供的模式字符串添加一个通配符并将 not 应用于结果

not key[`:Dname] like "[0-9]*"

这将为您提供一个布尔向量,return 您要使用的文件列表和索引:

key[`:Dname] where not key[`:Dname] like "[0-9]*"