こんにちは、
200 以上の列を持つ大きなテーブルを返すデータベース クエリがあり、作業する前にクリーンアップしたいと考えています。
列には、ラマン、XRD、XRF、BET、PSA などの計測ツール ソースを示す最初の用語があります。
これらの用語ごとにグループを作成し、上記のリストの名前をグループ名として使用したいと思います。
たとえば、「Raman」という用語で始まる列が 20 個あり、それらをすべてグループ化したいとします。
どのようにスクリプトを作成すればよいですか? Name starts with("Raman") を使用してリストを作成しようとしましたが、空のリストが返されるようです。
補足: ChatGPT に問い合わせましたが、役に立ちませんでした。
アンディ
これはデータによって多少異なりますが、一般的な考え方は通常
- 列のリストを取得する
- 列を適切なグループにまとめながらリストをループする
- 適切なグループをループして列グループを作成します
ループには For Each()、データ構造には Associative Array()、グループ (または Word(1,...)) のチェックには Starts With() を使用します。
これは私が始めたところであり、いいえ、これは機能しません。
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);
);
