Re^2: 表部品でのソートについて

投稿者:KNIGHT 投稿日:2024/02/13(Tue) 11:57:30 No.2915

陸さん、アークさん、ご親切にありがとうございます。

お二人とも、プロデルを使いこなされていますね。

アークさんの「保存番号は、要素のファイルの更新日の整数値」
「〜の整数値」なんていう記述ができるとは驚きました。
マニュアルのどこら辺に書かれていますのでしょうか?「並べ替え」と「並び替え」のバージョンによる差のことといい、アークさんはプロデルマニュアルよりもお詳しいですね。

日本語で書いてあるのに、解釈が追い付かない・・・・、なんと哀れな私。
頑張って、解釈を試みてみます。

どうも、お付き合いをありがとうございました。
今後ともよろしくお願いいたします。

Re^4: 表部品でのソートについて

投稿者:アーク 投稿日:2024/02/13(Tue) 10:58:41 No.2914

アークです。

〉何も変更されていないと思うのですが?
微妙な変更をしています。
「並べ替える」から「並び替える」へ
〉表部品1の2列目を昇順に並べ替える←サンプルに記載されていますが エラーが出て実行できません。
…という事でしたので…。
プロデルはバージョンによって「び」でないとエラーになる事が有ります。
その逆も有るようですが…。

〉プロデル上でやるとすれば、アークさんならどうプログラミングされますか?
私ならという事なので一般的な方法とは言えませんが…。

ファイル一覧は、{}
一覧は、フルパスで「フォルダ名\*.pdf」のファイルの一覧
一覧を要素にそれぞれ繰り返す
  保存番号は、要素のファイルの更新日の整数値
  「[保存番号-631139040000000000]:[要素のファイル名だけ]:[要素のファイルの更新日]」をファイル一覧へ追加する
繰り返し終わり
ファイル一覧を名前順に並べ替る
ファイル一覧を報告する

配列だけで遣るならこれでしょうか。
処理結果の形態としてどの様なものが必要なのかで変わってくると思いますが、
ファイル名と保存日時だけの配列にしたいなら下記のようにすれば得られます。

ソート済一覧は、{}
ファイル一覧を要素にそれぞれ繰り返す
  配列は、要素を「:」で区切ったもの
  {配列(2),配列(3)}をソート済一覧へ追加する
繰り返し終わり
ソート済一覧を報告する

参考までに…。

Re^4: 表部品でのソートについて

投稿者: 投稿日:2024/02/13(Tue) 08:39:44 No.2913

こんにちは。

横からすみません。

更新日時でのソートについて、並び替えの手順が複雑ですが、こんな感じでどうでしょうか。
簡単な流れとしては、ファイル一覧を取得したあと、カスタムソートという並び替えの方法を手順で指定する方法を利用してソートしています。
特に、多次元配列の場合は、現状はカスタムソートを利用しないとソートできない気がします。
※下記のサンプルソースを利用する場合は、1行目のパス部分を実際のファイルが存在するフォルダのパスに書き換えてから実行してみてください。

1.配列に更新日時が必要ない場合
並び替えた結果は、1次元の配列になります。

----- サンプルソース -----
パスは、「D:\書類」
ファイル一覧は、フルパスで「[パス]\*.pdf」のファイルの一覧
ファイル一覧を『
それを{左,右}とみなす
日付差は、(左のファイルの更新日)と(右のファイルの更新日)の日付差
もし日付差の合計秒数<0なら
1を返す。
他でもし日付差の合計秒数>0なら
-1を返す。
そうでなければ
0を返す
もし終わり
』で並び替える
結果は、ファイル一覧を[改行]で繋げたもの
結果を表示する
----------

2.配列に更新日時が必要な場合
並び替えた結果は、パスと更新日時を含む配列になります。

----- サンプルソース -----
パスは、「D:\書類」
ファイル一覧は、{}
(フルパスで「[パス]\*.pdf」のファイルの一覧)を要素にそれぞれ繰り返す
{要素, 要素のファイルの更新日}をファイル一覧へ追加する
繰り返し終わり
ファイル一覧を『
それを{左,右}とみなす
日付差は、(左(2))と(右(2))の日付差
もし日付差の合計秒数<0なら
1を返す。
他でもし日付差の合計秒数>0なら
-1を返す。
そうでなければ
0を返す
もし終わり
』で並び替える
結果は、ファイル一覧を[改行]で繋げたもの
結果を表示する
----------

以上、参考になれば幸いです。

Re^3: 表部品でのソートについて

投稿者:KNIGHT 投稿日:2024/02/12(Mon) 19:50:37 No.2912

御世話になります。
> 「はじめの手順」の最後の行を下記のように変更する事でエラーが解消します。
> 「表部品1の2列目を昇順に並び替える」
何も変更されていないと思うのですが?

◆動作環境情報◆
プロデル 2.0.1222
Windows 10 Pro 32ビット
メモリ:3.39 GB

新しいバージョンでプログラムを実行させるとエラーは出ませんが、並び替えがされていません。なるほど、数値として扱われていないからなのですね。
以下のようにすれば、並べ替えができました。

〜〜〜
メイン画面を表示する
待機する
メイン画面とは
  ウィンドウを継承する
はじめの手順
  初期化する
  ーー貼り付けた部品に対する操作をここに書きます
  データというデータ表を作る
  データに{「名前」,「値段」}という列を加える
  データの2列目を取得してそのデータ型を整数に変える
  データへ{名前=「みかん」,値段=30}を加える
  データへ{名前=「りんご」,値段=50}を加える
  データへ{名前=「なし」,値段=100}を加える
  データへ{名前=「めろん」,値段=1000}を加える
  データへ{名前=「ぶどう」,値段=120}を加える
  表部品1のデータ表をデータに変える
  表部品1の2列目を昇順に並べ替える
  
終わり
  初期化する手順
    ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
      この内容を「メイン画面」に変える
      初期化開始する
      表部品1という表部品を作る
      表部品1を初期化開始する
        その位置と大きさを{17,42,256,114}に変える
        その列見出し高さを18に変える
      表部品1を初期化終了する
      初期化終了する
  終わり
終わり
〜〜〜

ありがとうございました。
しかし、表部品まで使わなくてもソートすることはできないものでしょうか?
実際にやりたいのは、「あるフォルダに保存されているPDFファイルを、更新日の新しい順に並び変える」ことです。
プロデル上でやるとすれば、アークさんならどうプログラミングされますか?

よろしくお願いいたします。

Re^2: 表部品でのソートについて

投稿者:アーク 投稿日:2024/02/12(Mon) 10:54:56 No.2911

アークです。

状況を確認しました。
「はじめの手順」の最後の行を下記のように変更する事でエラーが解消します。

「表部品1の2列目を昇順に並び替える」

但しこのままだと数値ではなく文字列なので期待通りではないかも知れません。

Re: 表部品でのソートについて

投稿者:KNIGHT 投稿日:2024/02/12(Mon) 08:43:55 No.2910

アークさん、お返事をありがとうございます。
使用しているプロデルは、やや古いのですが、
==========
◆動作環境情報◆
プロデル 1.7.1150
Windows 10(32)
メモリ:3.39 GB
==========

デザイナーで、ウィンドウを追加して以下のようにしましたが、同じエラー文が出ました。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
メイン画面を表示する
待機する
メイン画面とは
  ウィンドウを継承する
はじめの手順
  初期化する
  ーー貼り付けた部品に対する操作をここに書きます
  データというデータ表を作る
  データに{「名前」,「値段」}という列を加える
  データへ{名前=「みかん」,値段=30}を加える
  データへ{名前=「りんご」,値段=50}を加える
  データへ{名前=「なし」,値段=100}を加える
  データへ{名前=「めろん」,値段=1000}を加える
  データへ{名前=「ぶどう」,値段=120}を加える
  表部品1のデータ表をデータに変える
  表部品1の2列目を昇順に並べ替える
終わり
  初期化する手順
    ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
      この内容を「メイン画面」に変える
      初期化開始する
      表部品1という表部品を作る
      表部品1を初期化開始する
        その位置と大きさを{17,42,256,114}に変える
        その列見出し高さを18に変える
      表部品1を初期化終了する
      初期化終了する
  終わり
終わり
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

実際にやりたかったのは、「あるフォルダに保存されているPDFファイルを、更新日の新しい順に並び変える」ことだったのですが、DOSコマンドなど使わずに、プロデル上でやるとすれば、アークさんならどうプログラミングされますか?

よろしくお願いいたします。

Re: 表部品でのソートについて

投稿者:アーク 投稿日:2024/02/11(Sun) 17:47:37 No.2909

KNIGHT さん、こんばんは。アークです。

かなり前のバージョン迄遡ると通っていたようですが、
最近のバージョンでは通らないようです。

表部品はGUI部品のひとつなので土台であるウィンドウが必要なようです。
何処かの時点で内部仕様が変わったようです。現在は、

Window1というウィンドウを作る
  Window1の実質大きさを{300,200}に変える
  Window1のタイトルを「Test」にする
Window1へ表部品1という表部品を作る

等とする事でエラーを吐かなくなります。

Re: 2次配列のソートについて

投稿者:KNIGHT 投稿日:2024/02/10(Sat) 17:39:29 No.2908

自己解決しました。
データ表を使いました。

データというデータ表を作る
データに{「果物名」,「値段」}という列を加える
データの2列目を取得してそのデータ型を整数に変える
果物リスト={{「みかん」,30},{「りんご」,100},{「なし」,120},{「メロン」,800},{「かき」,80},{「ぶどう」,300}}
データの一覧を果物リストに変える
データを「値段」で並び替えて並替後データとする
果物値段表は、並替後データすべての一覧
果物値段表を表示する

ただ、最後から2行目の「果物値段表は、並替後データすべての一覧」という文章の中の「すべて」が必要なのはどうしてか疑問です。
普通に考えて、これに気が付ける人はいないんじゃないかと思いますが。

表部品でのソートについて

投稿者:KNIGHT 投稿日:2024/02/10(Sat) 14:53:53 No.2907

引き続き御世話になります。
2次配列でのソートができないので、表部品に配列を設定して、ソートしようとしましたが、これも文法エラー(助詞「を」は、この手順呼出し文で使われません。)で実行できません。

データというデータ表を作る
データに{「名前」,「値段」}という列を加える
データへ{名前=「みかん」,値段=30}を加える
データへ{名前=「りんご」,値段=50}を加える
データへ{名前=「なし」,値段=100}を加える
データへ{名前=「めろん」,値段=1000}を加える
データへ{名前=「ぶどう」,値段=120}を加える
表部品1のデータ表をデータに変える
表部品1の2列目を昇順に並べ替える   ←サンプルに記載されていますが エラーが出て実行できません。

https://produ.irelang.jp/docs/data/grid/grid.htm#%E9%99%8D%E9%A0%86%E3%81%AB%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88%E3%82%8B

どうかよろしくお願いいたします。

2次配列のソートについて

投稿者:KNIGHT 投稿日:2024/02/10(Sat) 14:12:19 No.2906

御世話になります。
TTSneoで作成していたプログラムをプロデルに移植しようとしています。
2次配列をソートするにはどうすればよいのでしょうか?
例えば、果物の名前と、その値段が対になっている以下のような2次配列があるとき、
{{みかん、50}、{りんご、80}、{なし、100}、{メロン、1000}、{かき、30}、{ぶどう、120}}

値段の安い順や、値段の安い順に並べなおすにはどうすればよいのでしょうか?
TTSneoでは、「配列の2列目が大きい順に並び直す」などとできたのですが、プロデルではできません。

どうかよろしくお願いします。

▲ページの先頭へ

- WebForum -