Skip to content

myarray

Latest
Compare
Choose a tag to compare
@YUZRANIUM YUZRANIUM released this 01 Apr 08:26
f3133ed

マイ・アレイ GitHub release (latest by date including pre-releases)

多次元配列変数をなんやかんやする、なんてことないモジュール

不具合報告や要望等は HSPTV!掲示板 で頂けると幸いです。

今後の予定

  • ctlarray命令をはじめとした制御系命令の調整
  • bisrch命令, MDABiSrch命令の文字列型対応
  • 多次元配列変数のソート命令
  • 辞書的なもの
  • モジュール型変数への対応
  • 多次元配列の結合と分離 (※半分妄想)
  • [ ] 三角関数、数列機能の試作・追加Auniary命令新規追加に伴って廃案

特徴(Feature)

  • 標準命令のみで動作し、変数名、ラベル名、モジュール名の表示等が可能.
  • 1次元、2次元、3次元、4次元、全ての次元に対応.
  • ラベル型、文字列型、実数型、整数型に対応.
  • 配列の途中から値の書き出し、連続代入、配列コピー、型変換、次元の拡張・収縮、配列演算が可能.
  • 多次元配列を1次元化(平坦化)し、1次元配列のように扱う.

情報を書き出す priarray

多次元配列変数の情報を複数行文字列として書き出す priarray命令   (由来 : print array)

// string_var : 情報を受け取る文字列型変数
// ary        : 多次元配列変数
// coment     : コメント(省略可)
priarray string_var, ary, coment
表示内容 \ 型 label str double int struct COM object
変数名 O O O O O O
O O O O O O
各次元要素数 O O O O O O
使用時の行数 O O O O O O
値の書出し O O O O X X

デバッグウィンドウでも多次元配列変数の中身をテキストに出力できますが、この命令を使えばより柔軟なデバッグ作業、確認作業が可能になるはずです.

※あくまでも、デバッグ用、確認用としてお使い下さい.


連続代入を行う setarray

多次元配列変数に連続代入を行う setarray命令   (由来 : setting array)

// ary      : 代入先の配列変数 (dim系での初期化 必須)
// in_val   : 代入したい値
// idx_flag : indexフラグ
// idx      : 増減値
setarray ary, in_val, idx_flag, idx
動作内容 \ 型 label str double int
連続代入 --- O O O
増減機能 X O O O
  • 文字列型、実数型、整数型の多次元配列変数への連続代入が可能.

  • 実数型、整数型では代入時に増減値を指定することで値を変化させることが可能.

  • 文字列型の場合はインデックス付与として機能します.

検証用の多次元配列変数を簡単に準備できます.

※ 既存の配列や複数行文字列を配列変数に代入したい場合は cnvarray命令をご利用下さい
※ ラベル型配列を生成したい場合は labarray命令をご使用ください


値を書き出す outarray

多次元配列変数の値を複数行文字列として書き出す outarray命令   (由来 : output array)

// string_var : 配列変数の中身を受け取る文字列型変数
// ary        : 配列変数
// label_flag : ラベルモード
outarray string_var, ary, label_flag
  • priarray命令とは異なり、値のみを複数行文字列として書き出す

  • ラベル型、文字列型、実数型、整数型に対応

  • ラベル型を書き出す際に、ラベルモードのフラグを1にするとreturnが追加される
    (※stopは追加されません)


変換する cnvarray

あらゆるものを別の多次元配列に変換する cnvarray命令   (由来 : convert array)

// ary_name    : 変数名
// in_val      : 読み込む 複数行文字列型変数 または 多次元配列変数
// type        : 変換後の型を表す数値  (= 2, 2:文字列型 / 3:実数型 / 4:整数型)
// d1,d2,d3,d4 : 変換後の各次元要素数 (= 0)
cnvarray ary_name, in_val, type, d1, d2, d3, d4
  • 複数行文字列、多次元配列変数 を 別の多次元配列変数 に変換

  • 変換時に変数の型、及び各次元要素数を指定できる

  • 内部でdimtype ary_name, type, d1, d2, d3, d4としているので ary_name を初期化する必要はない

  • in_val が多次元配列変数の場合のみ d1 以降すべて省略できる.
    その際は in_val の各次元要素数が、そのまま ary_name の要素数となる ( ---> 配列変数コピー機能)

  • outarray命令と組み合わせることで、値と変数名はそのままに、次元の拡張・縮小、型変換を行うことができる

sdim hogehoge, 64, 10, 2
	:
sdim str_tmp, 1024
outarray str_tmp, hogehoge               // hogehoge のすべての値を複数行文字列として str_tmp に書き出し
cnvarray hogehoge, str_tmp, 4, 10, 5, 3  // hogehoge を整数型、3次元配列(10, 5, 3) に変換

ラベルを量産する labarray

ラベルを量産する labarray命令   (由来 : label array)

// string_var : 書き出し先の文字列型変数
// ary        : 書き出す文字列型配列変数
// in_val     : 代入値またはそれを格納した変数
// index      : 増減値
labarray string_var, ary, in_val, index

計算する calc_ary

多次元配列どうしの計算を行う calc_ary 命令   (由来 : calculate array)

// ans_ary    : 計算結果を受け取る変数名
// ary1, ary2 : 変数名
// calc_type  : 演算タイプ
// error_stop : 0除算フラグ (= 0, 0:停止しない / 1:停止する)
calc_ary ans_ary, ary1, ary2, calc_type, error_stop
  • 加算( + )、減算( - )、乗算( * )、除算( / )、剰余( \ )、実数指定での割増・割引計算、百分率指定での割増・割引計算が可能
  • 計算の種類はカスタム可能
  • HSP3の言語仕様に合わせて ans_aryary1 の変数型と各次元要素数で初期化
  • 文字列型、実数型、整数型のみ対応

その他
  • 配列情報取得 dim_info 命令
  • 多次元配列を1次元化した要素数を返す dimlinec 関数
  • 1次元化した要素数から元の各次元要素数を返す linedim 命令
  • 配列動作制御 ctlarray 命令
  • 制御フィールド開始 ctlarray_start 命令
  • 制御フィールド終了 ctlarray_end 命令
  • 制御の除外 ctlexcld 命令
  • 多次元配列の線形探索 MDALiSrch 関数
  • 多次元配列の二分木探索 MDABiSrch 命令
  • 多次元配列のクイックソート MDAQSort, MFCQSort 命令
  • 多次元配列を1次元配列として扱う uniary, uniary_ 関数, Auniary 命令
  • 複数の多次元配列を オフセットで まとめて扱う union_d 関数
  • 複数の多次元配列を 値で     まとめて扱う union 関数
  • union, union_d, union4, union4d 関数の書式設定を行う unifrmt 命令
  • 文字列をASCIIコードに変換する str2ASCI 命令
  • ASCIIコードを文字列に変換する ASCI2str 関数
  • 文字列をASCIIコードで大小比較 ASCIcomp 関数

試作中

  • 4つの多次元配列をまとめて扱う union4, union4d 関数


導入方法(Introduction)


各モジュールの説明
  • myarray_core モジュール (02_myarray_core.hsp)

    ほぼすべての命令・関数の中核を担うイテレータなどを内部命令化・関数化し、定義する本プロジェクト最重要モジュール。
    linedim命令、dimlinec関数やその他内部命令・関数を含む6つの命令・関数郡からなる。

  • myarray_list モジュール (02_myarray_list.hsp)

    このモジュールは主に多次元配列を1次元配列として扱うものや、配列をリストのように扱うといったデータ管理用途の機能を集めたものです。
    未だ開発途中で実験的なのもでもあり、今後の開発やアップデートの中心になリます。

  • myarray_srch モジュール (02_myarray_srch.hsp)

    ソートや線形探索・二分木探索など、ユーザーに提供する一部機能の前処理を行う、local指定を含む7つの命令・関数郡からなるモジュール。
    MDALiSrch関数、MDABiSrch命令等を含む。

  • myarray モジュール (02_myarray.hsp)

    これまで通り、ユーザー提供機能をまとめたモジュール。
    ラベル型変数、モジュール型変数へのアクセスを行うポインタ関連、配列制御関連の内部命令、pri, set, out, cnv, labarray命令の各内部命令とマクロ、配列演算命令など。



.
├─ 02_myarray_core.hsp
├─ 02_myarray_list.hsp
├─ 02_myarray_srch.hsp
├─ 02_myarray.hsp
│
├── 02_myarray
│   ├── 02_myarray_list.hs
│   ├── 02_myarray_srch.hs
│   ├── 02_myarray.hs
│   ├── 02_1_PriSetOut.hsp
│   ├── 02_2_CnvOut.hsp
│   ├── 02_3_Cnv.hsp
│   ├── 02_4_Lab.hsp
│   ├── 02_5_Ctl.hsp
│   ├── 02_6_Calc.hsp
│   ├── 02_7_Dict_test.hsp
│   └── 02_myarray.txt
│
├── README.md
└── License.txt
  • 02_myarray_core.hsp
  • 02_myarray_list.hsp
  • 02_myarray_srch.hsp
  • 02_myarray.hsp

上記の4つのファイルをユーザースクリプトのディレクトリか、HSP のインストールディレクトリ下の commonフォルダ内において、02_myarray.hsp をインクルードしてください。


  • 02_myarrayフォルダ

02_myarrayフォルダをHSPのインストールディレクトリ下にある doclibフォルダ内に02_myarrayフォルダごと 置いて下さい。
サンプルファイルもそのままで構いません。

例)
├─ hsp37
    ├─ common
    │  ├─
    │  ├─ 02_myarray_core.hsp
    │  ├─ 02_myarray_list.hsp
    │  ├─ 02_myarray_srch.hsp
    │  ├─ 02_myarray.hsp
    │
    ├─ doclib
    │  ├─ 02_myarrayフォルダ
	; インクルードするのは 02_myarray.hsp ファイルだけ!!
	#include "02_myarray.hsp"

必要環境(Environment)

  • Windows10, 11
  • HSP3.6以上

使用言語(Coding Language)

開発環境(Development environment)

  • Windows11 Pro 22H2 x64
  • Hot Soup Processor 3.7beta4
  • Visual Studio Code ver 1.77.0

LICENSE

本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。

これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。

ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。

作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。


謝 辞(SPECIAL THANKS)

  • HSPTV!掲示板の皆様

このモジュールは HSPTV!掲示板 の皆様によって支えられております。
この場を借りて感謝申し上げます。誠に有難うございます。

項 目 掲示板情報
Kind 宣 伝
Date 2023/01/16
Person Yuzranium
Pontent 多次元配列をなんやかんやする

項 目 掲示板情報 (過去ログ)
Date 2022/11/26
Pontent 多次元配列変数を複数行文字列に

更新履歴(Change Log)

ver 0.28.3

2023/04/01

新規追加命令・関数

名称 種別 概要
dim_info 命令 配列情報を取得する (※1)
uniary_ 関数 uniaryをループ内の使用に最適化
Auniary 命令 ループ内で連続代入
MDAQSort 命令 多次元配列クイックソート
MFCQSort 命令 多次元配列クイックソート

修正・変更

※1
ループ内の使用に最適化したuniary_, Auniary関数の新規追加に伴い、内部命令(local指定)だったdim_info命令に修正を加え、一般公開命令とした


テスト版 v0.28.1

2023/02/27

新規追加命令・関数

名称 種別 概要
str2ASCI 命令 文字列をASCIIコードに変換する
ASCI2str 関数 ASCIIコードを文字列に変換する
ASCIcomp 関数 文字列をASCIIコードで大小比較
union4d 関数 4つの多次元配列をオフセットでまとめる
union4 関数 4つの多次元配列を値でまとめる

修正・変更

  • bisrch, MDABiSrch 命令の文字列型対応
  • calc_ary の計算処理を行う内部関数cpu_ary_に演算タイプ9(べき乗)を追加
  • ソースコードの一部修正・整備

ver 0.28

2023/02/01

新規追加命令・関数

名称 種別 概要
uniary 関数 多次元配列を 1次元配列 として扱う
uniformat 命令 union_dとunion関数の出力書式の設定変更
union_d 関数 複数の配列を オフセット でまとめる
union 関数 複数の配列を 値 でまとめる
MDALiSrch 関数 多次元配列の 線形探索 を行う
MDABiSrch 命令 多次元配列の 二分木探索 を行う

修正・変更

  • priarray命令のモジュール型変数の情報表示ができない不具合の修正
  • outarray命令のマクロ登録を削除 (今まで通り利用可)
  • calc_ary命令内で呼び出され、実際に配列どうしの計算を行うcalc_var_ary(local)関数の名称を cpu_ary_へ変更
  • cpu_ary_関数の計算内容の分岐方法を、if-else:if による比較から、gotoとラベル型変数を利用したラベルジャンプの分岐法に変更_myarray_init_(local)命令内で 管理用変数を ldim cpu_jump, 15 として定義( cpu_jump(0)~(8)までを使用、cpu_jump(9)以降は空き)
  • myarrayモジュールの肥大化に伴い、同モジュールを以下のようにファイルごと分割することとした。(それぞれ重要度順に記す)

    • myarray_core モジュール (02_myarray_core.hsp)

      ほぼすべての命令・関数の中核を担うイテレータなどを内部命令化・関数化し、定義する本プロジェクト最重要モジュール。linedim命令、dimlinec関数やその他内部命令・関数を含む6つの命令・関数郡からなる。

    • myarray_list モジュール (02_myarray_list.hsp)

      このモジュールは主に多次元配列を1次元配列として扱うものや、配列をリストのように扱うといったデータ管理用途の機能を集めたものです。未だ開発途中で実験的なのもでもあり、今後の開発やアップデートの中心になリます。

    • myarray_srch モジュール (02_myarray_srch.hsp)

      ソートや線形探索・二分木探索など、ユーザーに提供する一部機能の前処理を行う、local指定を含む7つの命令・関数郡からなるモジュール。MDALiSrch関数、MDABiSrch命令等を含む。

    • myarray モジュール (02_myarray.hsp)

      ユーザー提供機能をまとめたモジュール。ラベル型変数、モジュール型変数へのアクセスを行うポインタ関連、配列制御関連の内部命令、pri, set, out, cnv, labarray命令の各内部命令とマクロ、配列演算命令など。