你好,
我有一个数据库查询,它返回一个大表,超过 200 列,并且想在处理之前清理它。
列中的初始术语表示计量工具源,例如拉曼、XRD、XRF、BET、PSA……
对于每个术语,我都想创建一个组,并使用上面列表中的名称作为该组的名称。
例如,有 20 列以术语“Raman”开头,我希望将它们全部组合在一起。
我应该如何编写脚本?我尝试使用 Name starts with("Raman") 创建一个列表,但似乎返回了一个空列表。
附注:我问过 ChatGPT,但没用。
安迪
这部分取决于你的数据,但一般的想法通常是
- 获取列列表
- 循环遍历列表,并将列收集到适当的组中
- 循环遍历适当的组并创建列组
For Each() 用于循环,Associative Array() 用于数据结构,可能还有 Starts With() 用于检查组(或 Word(1,...))
这是我开始的地方,但不,这不起作用。
Names Default to Here(1);
dt = Current Data Table();
CL = dt << Get Column Names();
Raman={};
For Each ( {value,index},CL,if(starts with(value,"Raman"),Raman<<INSERT item=""></INSERT>Next steps
Andy
几个问题:
- 您想对所有列进行分组吗?
- 您的列是否有清晰的组分隔符,例如下划线 (Raman_)
Names Default To Here(1);
dt = Current Data Table();
CL = dt << Get Column Names();
Raman = {};
For Each({value}, CL,
If(Starts With(value, "Raman"),
Insert Into(Raman, value);
);
);
dt << Group Columns("Raman", Raman);
完整示例基于我所拥有的示例
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(1),
Compress File When Saved(1),
New Column("Raman1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("Raman2", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("XRD1", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("Raman3", Numeric, "Continuous", Format("Best", 12), Set Values([.])),
New Column("XRD2", Numeric, "Continuous", Format("Best", 12), Set Values([.]))
);
collist = dt << Get Column Names("String");
aa_groups = Associative Array();
aa_groups["Raman"] = {};
aa_groups["XRD"] = {};
For Each({groupname}, aa_groups << get keys,
For Each({value}, collist,
If(Starts With(value, groupname),
Insert Into(aa_groups[groupname], value);
);
);
);
For Each({{groupname, cols}}, aa_groups,
dt << Group Columns(groupname, cols);
);
