はじめに
日本語プログラミング言語Mindの小技「処理単語 YVとWO」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありません。
Mind7の付属の上級者向けドキュメントmind7\doc\file.docmに関連した記載があります。
F5. ファイルの読み書き
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■一行読み出し
次の二通りの記述が可能です。
-----------------------------------
<論理ファイル>から 一行読み出し → 文字列
<論理ファイル>から <文字列実体変数>をつかい 一行読み出し → 文字列
-----------------------------------
いずれも、スタックには読み出しした文字列情報を返して来ますが、後者の場合にはユーザが指定した変数に読み出します。これにより、従来は不可能だった「読み出し文字列」の長さを超えるような長い行も、変数サイズさえ長くとっておけば読み出しができるようになりました。
AboutMind7.txt
「・・をつかい ○○する」という新しい表現が導入されました。たとえば、「一行読み出し」や「文字列変換」など、新しい文字列がランタイム内部に生成されるような処理単語を使う場合、その生成場所(文字列実体変数や構造体)を利用者が指定できます。
処理単語属性の「WO」は「処理単語名の送り仮名に「を」「から」「より」のいずれかを必須」の意です。さらにそのバリエーションとして「をつかい」がありますのでそれを強制する例として「一行読み出し」があります。
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
「処理単語 YV」は日本語プログラミング言語Mindのスタック属性を設定する単語で、処理単語の定義部の直後に記述します。
処理単語属性の「YV」の「Y」は「読み出し先文字列実体を記述するが省略可能」の意です。
処理単語属性の「YV」の「V」は構造体のポインタを渡すという意です。
この2文字がセットになった処理単語属性を持つ単語の例として「一行読み出し」があります。
Mind7の付属の上級者向けドキュメントBounpouHenkou-B.docmに記述されているのは、通常の構造体を想定しているため、.Vに続く処理単語記号はKOとなっていますが、「論理ファイル」というファイル型の変数も構造体の1種であるため、下記のように記述する例がMindで記述された公式ライブラリソースには散見されます。
論理ファイルを解放とは 処理単語 .V SQ
ファイルポインタを末尾に設定とは 処理単語 .V SQ
「一行読み出し」はこれらの属性に加えて、「読み出し先文字列実体を記述するが省略可能」の属性と、「読み出し先文字列実体」の送り仮名に「をつかう」が強制されているため、属性WOが続いています。
一行読み出しとは 処理単語 YV SQ WO
今回は、この行バッファ用の「読み出し先文字列実体」を使う記述と使わない記述での実行の様子を検証します。
今回も、論理ファイルのファイル型変数をグローバルに宣言した後、それらを独自定義した単語内で扱う処理をサンプルとしています。
具体的には下記の記事に使われたサンプルソースコードを改修して流用します。
こちらの記事との違いは、「一行データ読み出ししてデータ終り?」の処理単語属性を「一行データ読み出し」と同等に修正したことです。
※こちらの記事に、Mind開発者の@killyさんの補足コメントで、YV SQ WOの処理単語属性を付けた方がよいとのアドバイスいただきましたので、Qiita読者様向けには少し順を追って解説しております。
Mindプログラムソース
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは ファイル。
ファイルをオープンするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを サンプル物理ファイルパスで オープンし
エラー?
ならば 「サンプルファイルのオープンに失敗しました。(」を 表示し
エラー文字列を 表示し 「)」を 一行表示し
実行終わり
つぎに
「サンプルファイルをオープンしました。」を 一行表示すること。
一行読み出してデータ終り?とは 処理単語 YV SQ WO
([クライアント実体]、ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
読出バッファは 文字列実体情報
交換し
(→ ファイル管理テーブル、[クライアント実体])
読み出し文字列で 省略時の文字列実体に積み換え 読出バッファに 入れ
読出ファイルに 入れ
読出ファイルから 読出バッファをつかい 一行読み出し
読出ファイルが データ終り?。
ファイルをクローズするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを クローズし
「サンプルファイルをクローズしました。」を 一行表示すること。
メインとは (・ → ・)
サンプルファイルで ファイルをオープンし
ここから
サンプルファイルを 一行読み出してデータ終り?
ならば 捨てて 打ち切り
さもなければ ダブルクオートで囲んで表示し 改行し
つぎに
繰り返し
サンプルファイルで ファイルをクローズすること。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
本記事の主題はユーザー定義単語「一行読み出してデータ終り?」に対してユーザー指定桁数の行バッファを使うか使わないか任意とするの処理単語属性を設定しましたので、使う場合と使わない場合でどうなるかですが、とりあえず従来コードの使わない状態でコンパイル・実行を事前に確認しておきます。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind fileinfo3 file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> fileinfo3.exe
Mind8
C:\developments\vscode\mind9>mind fileinfo3 file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> fileinfo3.exe
Mind7
C:\developments\vscode\mind9>mind fileinfo3 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 -> fileinfo3.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>fileinfo3
サンプルファイルをオープンしました。
"サンプルテキストファイルの1行目です。"
"サンプルテキストファイルの2行目です。"
"サンプルテキストファイルの3行目です。"
"サンプルテキストファイルの4行目です。"
"サンプルテキストファイルの5行目です。"
サンプルファイルをクローズしました。
C:\developments\vscode\mind9>
いかがでしょうか?ここまでで、(ユーザー指定行バッファの文字列実体変数は使用しないで同じ)処理単語属性を.V SQと設定したバージョンと同じ結果が確認されました。
ユーザー指定行バッファの文字列実体変数は使用するバージョンとの比較
続いてが本記事の主題です。まず、ユーザー指定行バッファの文字列実体変数を宣言し、「一行読み出してデータ終り?」でも使用するコードにしています。
Mindプログラムソース(ユーザー指定行バッファの文字列実体変数は使用するに変更)
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは ファイル。
サンプル読出行バッファは 文字列実体 長さ 50桁。※←追加
ファイルをオープンするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
※定義の記述は略(fileinfo3.srcと同じ)
一行読み出してデータ終り?とは 処理単語 YV SQ WO
([クライアント実体]、ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
読出バッファは 文字列実体情報
※定義の記述は略(fileinfo3.srcと同じ)
ファイルをクローズするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
※定義の記述は略(fileinfo3.srcと同じ)
メインとは (・ → ・)
サンプルファイルで ファイルをオープンし
ここから
サンプルファイルから サンプル読出行バッファをつかい 一行読み出してデータ終り?
ならば 捨てて 打ち切り
さもなければ ダブルクオートで囲んで表示し 改行し
つぎに
繰り返し
サンプルファイルで ファイルをクローズすること。
メイン内で「一行読み出してデータ終り?」を実行する記述の手前に「サンプル読出行バッファをつかい」が記述されています。
ここから
サンプルファイルを 一行読み出してデータ終り?
ここから
サンプルファイルから サンプル読出行バッファをつかい 一行読み出してデータ終り?
コンパイル結果
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>mind fileinfo4 file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> fileinfo4.exe
無事にコンパイルが通過しました。
Mind7/8/9β
Mind8の結果です。記述は割愛していますがMind7/9βも同じです。
C:\developments\vscode\mind9>fileinfo4
サンプルファイルをオープンしました。
"サンプルテキストファイルの1行目です。"
"サンプルテキストファイルの2行目です。"
"サンプルテキストファイルの3行目です。"
"サンプルテキストファイルの4行目です。"
"サンプルテキストファイルの5行目です。"
サンプルファイルをクローズしました。
C:\developments\vscode\mind9>
いかがでしたでしょうか?ユーザー定義の桁数指定の行バッファを使用する、使用しないで引数の記述が異なっていても同一定義のユーザー定義単語が動作することを検証するのが本記事の主題でした。
参考情報
この小技「処理単語 YVとWO」を使った記述例の記事はまだありません。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。
本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう![]()