hpcc - 如何在 HPCC / ECL 中将 SET 转换为 DATASET?
问题描述
我在 ECL 中有这个 SET
EXPORT TableNames := [
'tbl1',
'tbl2',
'tbl3',
'tbl4'
];
APPLY(TableNames, SomeFunctionPreviouslydefined);
...我想将它传递给使用 APPLY 的函数。APPLY 不接受 SET:
"3002: \"tblList\" 附近的语法错误:预期的范围、行集、SELF、SUCCESS、数据行、数据集、字典、模块名、标识符、标识符、函数名、标识符、宏名、'+'、' ^', '(', '['"
我该怎么做?
解决方案
尽管在文档中不是很清楚(https://hpccsystems.com/training/documentation/all - ECL 语言参考),但您可以使用 DATASET 声明将 SET 转换为 DATASET,具体形式为:
[ attr := ] DATASET( recordset [, recstruct ] );
attr DATASET 的名称,供以后在其他定义中使用
记录集一组内嵌数据记录。这可以简单地命名先前定义的集合定义或显式使用方括号来指示内联集合定义。方括号内的记录用逗号分隔。记录由以下任一方式指定: 1) 使用花括号 ({}) 将每个记录的字段值括起来。每条记录中的字段值以逗号分隔。2) 产生数据行的内联转换函数的逗号分隔列表。列表中的所有转换函数必须生成相同结果格式的记录。
重组 可选。记录集的 RECORD 结构。仅当记录集参数只是一条记录或内联转换函数列表时才可省略
因此,对于您的示例,您可以使用:
EXPORT Layout := RECORD
STRING tableName;
END;
EXPORT TableNames := [
'tbl1',
'tbl2',
'tbl3',
'tbl4'
];
ds_inlineLayout := DATASET(TableNames, {STRING tableName}); // Define the layout inline
ds_explicitLayout := DATASET(TableNames, Layout); // Use a an explicitly defined layout
OUTPUT(ds_inlineLayout);
OUTPUT(ds_explicitLayout);
最后,在你的应用中使用它:
APPLY(ds_inlineLayout, SomeFunctionPreviouslydefined);
推荐阅读
- ruby-on-rails - 在 Ruby on Rails 项目上添加引导程序的问题
- javascript - Javascript没有创建两个
通过 for 循环 - javascript - ffmpeg的元数据在电子应用程序中未定义
- c# - 如何使用 LINQ 找到具有最低值的元素?
- java - 如何将长字符串拆分为“)”处的行?
- php - PHP IF 标签 Wordpress
- java - 有一个专用的锁对象有用吗?
- systemc - 将 sc_logic 分配给 sc_lv[i] - SystemC
- java - rg.hibernate.loader.MultipleBagFetchException:不能同时获取多个包
- html - Bootstrap Grid - 导航栏 - 边框问题