获取 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]*"
我正在使用 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]*"