在Q语言中遍历目录获取文件路径名时遇sv类型错误求解决
Q语言获取目录文件完整路径的问题分析与解决
问题原因
你的代码出错核心在于两点:
get函数误用:get的作用是读取文件内容,而非获取目录句柄。用get directoryPath试图获取目录信息完全不符合该函数的功能,返回结果并非预期的目录结构,直接导致后续sv操作出现类型错误。- 目录符号转换错误:你尝试的
key:directoryPath写法有误,:后需要直接跟路径字符串,而非变量名。正确做法是将字符串类型的路径转换为Q语言的目录符号(以:`开头的符号类型)。
正确实现方式
方式一:直接拼接字符串路径
directoryPath: "/tmp" // 将字符串路径转为目录符号,获取文件名列表后逐个拼接完整路径 fileList: directoryPath ,/: key `:$directoryPath
执行后fileList会返回预期结果:
"/tmp/hello_world_1.q" "/tmp/hello_world_2.q"
方式二:用sv拼接符号路径(更符合Q语言路径操作习惯)
// 直接定义目录符号,或从字符串转换 directorySym: `:/tmp // 获取目录下的文件名符号列表 fileSyms: key directorySym // 用sv拼接目录与文件名符号,再转为字符串路径 fileList: string each directorySym sv/: fileSyms
关键知识点说明
key函数:传入目录符号时,key会返回该目录下的所有文件/子目录名称(字符串或符号类型,取决于Q版本)。sv函数:专门用于拼接符号类型的路径,比如:/tmp` sv `hello_world_1.q会返回:/tmp/hello_world_1.q,再用string转成字符串路径即可。- 目录符号转换:将字符串路径转为目录符号,要用
:`$pathStr的写法,而非直接在变量前加:。
内容的提问来源于stack exchange,提问作者cpd1
相关产品推荐
相关产品推荐

