はじめに
日本語プログラミング言語Mindの小技「処理単語 .V」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありません。
Mind7の付属の上級者向けドキュメントmind7\doc\senior\BounpouHenkou-B.docmに記載があります。
B19. 構造体情報
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
構造体の情報を格納する変数というものが、Ver.5では特には用意してありませんでした。構造体の参照は、結局は文字列情報としてスタックに積まれて来たため、「○○は 文字列」で宣言した変数に格納することで代用して来ました。
しかしVer.7から「○○は 構造体情報」という専用の変数を用意しています。
これは、ソースの保守上優れているだけでなく、文字列情報変数とは違う扱いを受け
ることから、より便利に使うことができます。次のように使います。
(A)--------------------------------
初期値で埋めるとは 処理単語 .V KO
(<構造体> → ・)
クライアント構造体は 構造体情報
クライアント構造体に 入れ
1を
クライアント構造体を 文字列情報分解し
満たすこと。
--------------------------------
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
「処理単語 .V」は日本語プログラミング言語Mindのスタック属性を設定する単語で、処理単語の定義部の直後に記述します。
構造体をグローバル変数としてべたに扱っている場合は問題が少ないですが、自分で定義した単語の中にスタックで渡したいときはいろいろ注意が必要です。
構造体もその構造を構成する変数群全体をスタックに渡すことはできないため、文字列実体系の変数と同じようにその変数の先頭を指すアドレスポインタが渡され、コンパイラに(ソースコード上は後に続く単語名に)対して、スタックに渡されたのはただの変数のバリューではなく、アドレスを参照したものですよということを知らせる必要があります。
Mind7の付属の上級者向けドキュメントに記述されているのは、通常の構造体を想定しているため、.Vに続く処理単語記号はKOとなっていますが、「論理ファイル」というファイル型の変数も構造体の1種であるため、下記のように記述する例がMindで記述された公式ライブラリソースには散見されます。
論理ファイルを解放とは 処理単語 .V SQ
ファイルポインタを末尾に設定とは 処理単語 .V SQ
今回は、論理ファイルのファイル型変数をグローバルに宣言した後、それらを独自定義した単語内で扱う処理をサンプルとしています。
具体的には下記の記事に使われたサンプルソースコードを改修して流用します。
こちらの記事との違いは、処理単語属性を追加したことです。
※こちらの記事に、Mind開発者の@killyさんの補足コメントで、YV SQ~の処理単語属性を付けた方がよいとのアドバイスいただきましたので、Qiita読者様向けには少し順を追って解説しております。
Mindプログラムソース
Mindプログラムソース
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは ファイル。
ファイルをオープンするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを サンプル物理ファイルパスで オープンし
エラー?
ならば 「サンプルファイルのオープンに失敗しました。(」を 表示し
エラー文字列を 表示し 「)」を 一行表示し
実行終わり
つぎに
「サンプルファイルをオープンしました。」を 一行表示すること。
一行読み出してデータ終り?とは 処理単語 .V SQ (ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを 一行読み出し
読出ファイルが データ終り?。
ファイルをクローズするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを クローズし
「サンプルファイルをクローズしました。」を 一行表示すること。
メインとは (・ → ・)
サンプルファイルで ファイルをオープンし
ここから
サンプルファイルを 一行読み出してデータ終り?
ならば 捨てて 打ち切り
さもなければ ダブルクオートで囲んで表示し 改行し
つぎに
繰り返し
サンプルファイルで ファイルをクローズすること。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
本記事の主題は上記の「サンプルファイル」変数の定義が論理ファイルでなかった場合にどうなるかですが、とりあえず正常系でコンパイル・実行を事前に確認しておきます。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind fileinfo2 file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> fileinfo2.exe
Mind8
C:\developments\vscode\mind9>mind fileinfo2 file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> fileinfo2.exe
Mind7
C:\developments\vscode\mind9>mind fileinfo2 file
日本語プログラミング言語 Mind Version 7.5 for Windows
Copyright(C) 1985-2004 Scripts Lab. Inc.
Single user license. Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> fileinfo2.exe
実行結果
つづいて実行してみます。
sample.txtは下記の内容です。
C:\developments\vscode\mind9>type sample.txt
サンプルテキストファイルの1行目です。
サンプルテキストファイルの2行目です。
サンプルテキストファイルの3行目です。
サンプルテキストファイルの4行目です。
サンプルテキストファイルの5行目です。
C:\developments\vscode\mind9>
Mind7/8/9β
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>fileinfo2
サンプルファイルをオープンしました。
"サンプルテキストファイルの1行目です。"
"サンプルテキストファイルの2行目です。"
"サンプルテキストファイルの3行目です。"
"サンプルテキストファイルの4行目です。"
"サンプルテキストファイルの5行目です。"
サンプルファイルをクローズしました。
C:\developments\vscode\mind9>
いかがでしょうか?ここまでで、処理単語属性を設定しなかったバージョンと同じ結果が確認されました。
処理単語属性を設定しなかったバージョンとの比較
続いてが本記事の主題です。まず、処理単語属性を設定しなかったバージョンのソースの「サンプルファイル」の定義型を通常の変数型にしてしまいます。
Mindプログラムソース(処理単語属性を設定しなかったバージョンでファイル型を整数変数に変更)
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは 変数。※ファイル → 変数 に変更
ファイルをオープンするとは (ファイル情報 → ・)
読出ファイルは ファイル情報
※定義の記述は略
一行読み出してデータ終り?とは (ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
※定義の記述は略
ファイルをクローズするとは (ファイル情報 → ・)
読出ファイルは ファイル情報
※定義の記述は略
※メイン定義の記述は略
コンパイル結果
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>mind fileinfo file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> fileinfo.exe
コンパイルが通過しました。
C:\developments\vscode\mind9>fileinfo
C:\developments\vscode\mind9>
実行は空振りに終わりました。この状態ではとくに実行エラーは起きないようでした。
Mindプログラムソース(処理単語属性を設定したバージョンでファイル型を整数変数に変更)
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは 変数。※ファイル → 変数 に変更
ファイルをオープンするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
※定義の記述は略
一行読み出してデータ終り?とは 処理単語 .V SQ (ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
※定義の記述は略
ファイルをクローズするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
※定義の記述は略
※メイン定義の記述は略
コンパイル結果
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>mind fileinfo2 file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
3 個のエラーが有ります。
コンパイルエラーになりました。
fileinfo2.src 32 行目でエラー。行内容は、
サンプルファイルで ファイルをオープンし
要因1:処理単語"ファイルをオープン"が操作できない変数を記述しています。
fileinfo2.src 35 行目でエラー。行内容は、
サンプルファイルを 一行読み出してデータ終り?
要因1:処理単語"一行読み出してデータ終り?"が操作できない変数を記述しています。
fileinfo2.src 41 行目でエラー。行内容は、
サンプルファイルで ファイルをクローズすること。
要因1:処理単語"ファイルをクローズ"が操作できない変数を記述しています。
3 個のエラーが有ります。
いかがでしたでしょうか?このコンパイルエラーの内容を確認するのが、本記事の主題でした。
参考情報
この小技「処理単語 .V」を使った記述例の記事はまだありません。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。
本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう![]()