【问题标题】:KDB: How to match string of possible dates with rows of table?KDB:如何将可能的日期字符串与表格行匹配?
【发布时间】:2019-03-20 04:18:37
【问题描述】:

我本质上只是想创建一个代表文件名日期的日期列。

我的表filesInDir 只是一列四行,称为filepath

":..\..\code\products\Q\ExtData\CIBC\availability\Global\EquityOnly\daily\bnyMellon_inventory\push_list_20190314_040253_Equity.csv"
":..\..\code\products\Q\ExtData\CIBC\availability\Global\EquityOnly\daily\bnyMellon_inventory\push_list_20190314_040306_Equity.csv"
":..\..\code\products\Q\ExtData\CIBC\availability\Global\EquityOnly\daily\bnyMellon_inventory\push_list_20190311_040321_Bond.csv"
":..\..\code\products\Q\ExtData\CIBC\availability\Global\EquityOnly\daily\bnyMellon_inventory\push_list_20190312_999999_Cash.csv"

我还有一个可能的日期列表,2019.03.12 2019.03.11 2019.03.14。如何将日期列表与上表的行匹配,以便我可以获得一个新列,该列指定与文件路径字符串匹配的日期值。

【问题讨论】:

    标签: string string-matching kdb


    【解决方案1】:

    如果您的所有文件路径都遵循与示例路径相同的格式,您可以很容易地创建一个日期列:

    update date:"D"$8#'103_'filePaths from filesInDir
    

    然后使用此列匹配您的日期。

    【讨论】:

      【解决方案2】:

      这是您解析文件路径以获取日期的方式,请注意“\”是转义符号,因此您需要写为“\\”而不是直接从系统命令中检索字符串。

      创建表

      filesInDir:([]filePaths:(":..\\..\\code\\products\\Q\\ExtData\\CIBC\\availability\\Global\\EquityOnly\\daily\\bnyMellon_inventory\\push_list_20190314_040253_Equity.csv";
      ":..\\..\\code\\products\\Q\\ExtData\\CIBC\\availability\\Global\\EquityOnly\\daily\\bnyMellon_inventory\\push_list_20190314_040306_Equity.csv";
      ":..\\..\\code\\products\\Q\\ExtData\\CIBC\\availability\\Global\\EquityOnly\\daily\\bnyMellon_inventory\\push_list_20190311_040321_Bond.csv";
      ":..\\..\\code\\products\\Q\\ExtData\\CIBC\\availability\\Global\\EquityOnly\\daily\\bnyMellon_inventory\\push_list_20190312_999999_Cash.csv"))
      

      创建日期列

      update date:{"D"$("_"vs last "\\" vs x)[2]} each filePaths from `filesInDir
      

      我还有一个可能的日期列表,2019.03.12 2019.03.11 2019.03.14。如何将日期列表与上表的行进行匹配,以便获得一个新列,该列指定与文件路径字符串匹配的日期值。

      你能举例说明一下吗?不清楚您打算和期望看到什么

      如果您只想说一个“标志”列来指示记录中的日期是否与 dateRange 匹配,您可以简单地使用 in 来匹配它。

      dateRange:2019.03.12 2019.03.11 2019.03.14
      update match:date in dateRange from `filesInDir
      

      这将是输出:

      【讨论】:

        【解决方案3】:

        使用0:的另一种方法

        update date:raze("   D";"_")0:filePaths from filesInDir
        

        这取决于你的文件路径中_ 的出现

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-11
          • 1970-01-01
          • 2012-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多