我正在使用q来获取该目录中列出的所有文件:
key `:Dname
,然后尝试过滤出以数字开头的数字:
key `:Dname like "[0-9]"
,但是相似部分无法正常工作。我也尝试过get
,因为我喜欢包含文件所在目录的路径。
答案 0 :(得分:3)
请记住,q从右到左评估表达式。您的代码将首先评估
`:Dname like "[0-9]"
并将key
应用于结果。
您想要更近一点
key[`:Dname] like "[0-9]"
但是要获得所需的内容,必须在提供的模式字符串中添加通配符,并将not
应用于结果
not key[`:Dname] like "[0-9]*"
这将为您提供布尔向量,以返回您要在其中使用的文件列表和索引:
key[`:Dname] where not key[`:Dname] like "[0-9]*"
答案 1 :(得分:2)
如果文件名定义为
filename:`2019.01.20file.txt
您可以使用like
将其与模式进行比较,类似于您所做的事情:
filename like "[0-9]*"
"*"
是通配符,表示[0-9]之后的所有内容都可以出现
like
将字符串或符号与模式进行比较
因此,如果文件名以0到9之间的数字开头,则此行返回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
此方法返回布尔值列表,该列表指示每个文件是否以“ q”开头:
not
反转此列表的1和0。where
返回布尔列表等于1的索引key[`:q]
我希望这对您有帮助