[あすかぜ・ねっと]あすかぜ・ねっと自作ソフトCassava > サポート掲示板

Cassava Editor サポート掲示板

スレッド一覧に戻る返信

[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]

いろいろとありがとうございます。
また、使ってみたいと思います。

スレッド一覧に戻る返信