我正在尝试运行以下代码以读取位置C:/ q / BitCoin / Input上所有可用的csv文件。遇到错误并且不知道解决方案是什么?csv文件是具有三个字段的标准文件。
raze{[x]
inputdir:`:C:/q/BitCoin/Input;
filelist1:key inputdir;
filelist2:` sv' inputdir,'filelist1;
filelist3:string filelist2;
r:flip`Time`Qty`Price!("ZFF";",")0:x;
select from r
} each `$filelist3
硬编码文件名并在下面的代码下运行是可行的,但是我不想硬编码
raze {[x]
r:flip`Time`Qty`Price!("ZFF";",")0:x;
select from r
} each (`$"C:/q/BitCoin/Input/bitbayPLN.csv";`$"C:/q/BitCoin/Input/anxhkAUD.csv")
遇到错误
在执行查询期间发生错误。 服务器发送了响应: 文件列表3
有人可以帮助解决问题吗?
答案 0 :(得分:3)
收到错误“ filelist3”的原因是因为filelist3是在lambda中定义的,而在lambda之外却未被识别或定义。有多种方法可以解决此问题,如下所述。
首先,您基本上可以在lambda内部进行所有已定义的工作,并将其放在每个lambda的右侧。
raze{[x] r:flip`Time`Qty`Price!("ZFF";",")0:x; select from r
} each `$(string (` sv' `:C:/q/BitCoin/Input,'(key `:C:/q/BitCoin/Input)))
或者,如果您愿意,可以创建一个函数,该函数将为您生成filelist3并在每个函数的右侧使用它。
f:{[inputdir] filelist1:key inputdir; filelist2:` sv' inputdir,'filelist1; filelist3:string filelist2; filelist3}
raze{[x] r:flip`Time`Qty`Price!("ZFF";",")0:x; select from r
} each `$f[`:C:/q/BitCoin/Input]
我希望这会有所帮助。
非常感谢,
乔尔