KDB:尝试在一个位置读取多个csv文件

时间:2019-07-15 19:24:07

标签: kdb

我正在尝试运行以下代码以读取位置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

有人可以帮助解决问题吗?

1 个答案:

答案 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]

我希望这会有所帮助。

非常感谢,

乔尔