[813] 複雑なCSV変換
ふじさん [2024/02/15 13:08:10]
まだ、Cassavaは、使い始めて間もないのですが、
マクロについての質問です。
次のようなことをマクロを作成して可能でしょうか?
CSV①:
ユーザーID,注文品コード,注文品数量
user1,001,5
user1,003,2
user2,006,3
user3,002,10
user3,007,12
user3,004,18
CSV②:
ユーザーID,注文品1コード,注文品1数量,注文品2コード,注文品2数量,注文品2コード,注文品2数量,・・・
user1,001,5,002,0,003,2,004,0,005,0,006,0,007,0,・・・
user2,001,0,002,0,003,2,004,0,005,0,006,3,007,0,・・・
user3,001,0,002,10,003,0,004,18,005,0,006,0,007,12,・・・
CSV①のCSVをCSV②の形にマクロで変換可能でしょうか?
Re: [813] 複雑なCSV変換
あすかぜ [2024/02/15 23:14:51]
マクロを書いてみました。
https://www.asukaze.net/soft/cassava/macro/asukaze/bbs813_20240215.cms
Ver.2.5 以降のみで動作する書き方となっています。
ユーザーや注文品コードの並び順には数値としての大小関係を使っています。数字以外のコードは辞書順にはなりません。
かなり複雑なマクロになってしまいましたが、期待通りに動作するでしょうか。
Re: [813] 複雑なCSV変換
あすかぜ [2024/02/16 08:36:51]
一点補足です。
昨日のマクロでは、同じユーザーが同じ注文品を複数回購入した場合、最後の数量のみが使われます。
複数回の購入の数量を合算したい場合は、36 行目から 41 行目の
set(user, code, quantity) {
if (!(user in this.map)) {
this.map[user] = {};
}
this.map[user][code] = quantity;
}
を
set(user, code, quantity) {
if (!(user in this.map)) {
this.map[user] = {};
}
if (code in this.map[user]) {
this.map[user][code] += quantity;
} else {
this.map[user][code] = quantity;
}
}
のように書き換えてください。
よろしくお願いします。
Re: [813] 複雑なCSV変換
ふじさん [2024/02/19 15:16:02]
いろいろとありがとうございます。
また、使ってみたいと思います。