はじめに
日本語プログラミング言語Mindの小技「論理ファイルを獲得」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありません。
Mind7の付属の上級者向けドキュメントmind7\doc\file.docmに記載があります。
F4. ファイルのオープン
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■論理ファイルを獲得
--------------------------------
<バッファ長>で 論理ファイルを獲得 --> ファイル情報、合否
--------------------------------
普通のファイルの定義は「○○は ファイル。」で行うことになっていますが、その場合、そのファイルのアクセス終了後もずっとその為の構造体が確保され続けます。
本単語は、そのような明示的な論理ファイル名宣言をせずに、ダイナミックにファイルバッファをメモリ獲得し、その構造体情報を返すものです。
■論理ファイルを解放
--------------------------------
<ファイル情報>で 論理ファイルを解放 --> ・
--------------------------------
前記「論理ファイルを獲得」で獲得したメモリ(ファイルバッファ)を解放します。
本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。
対応バージョン
■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版
小技の解説
Mindの小技「論理ファイルを獲得」は、Mindのファイルの基本操作機能の一つです。
ファイルを読み書きするためには、必ず「オープン」して、操作終了後は「クローズ」します。このとき、Mindの場合はファイルの物理パス情報の文字列と「論理ファイル」という変数をセットにして「オープン」します。この「論理ファイル」の宣言は公式マニュアルにはグローバル宣言することが必須となっています。
「論理ファイルを獲得」は「論理ファイル」のグローバル宣言を行わずに動的に確保してスタックに返しますので、それを「ファイル情報」変数に格納して、ファイルを操作できるようにするものです。
論理ファイルのファイル型変数をグローバルに宣言していた下記の記事に使われたサンプルソースコードを改修して流用します。
※実際は上記のコードにこちらの処理単語属性を追加したコードからの修正となります。
Mindプログラムソース
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
ファイルをオープンするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを サンプル物理ファイルパスで オープンし
エラー?
ならば 「サンプルファイルのオープンに失敗しました。(」を 表示し
エラー文字列を 表示し 「)」を 一行表示し
実行終わり
つぎに
「サンプルファイルをオープンしました。」を 一行表示すること。
一行読み出してデータ終り?とは 処理単語 YV SQ WO
([クライアント実体]、ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
読出バッファは 文字列実体情報
交換し
(→ ファイル管理テーブル、[クライアント実体])
読み出し文字列で 省略時の文字列実体に積み換え 読出バッファに 入れ
読出ファイルに 入れ
読出ファイルから 読出バッファをつかい 一行読み出し
読出ファイルが データ終り?。
ファイルをクローズするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルを クローズし
「サンプルファイルをクローズしました。」を 一行表示すること。
メインとは (・ → ・)
サンプルファイルは ファイル情報
200桁で 論理ファイルを獲得し 真?
ならば サンプルファイルに 入れ
さもなければ 捨て
「論理ファイルの獲得に失敗しました。」を 一行表示し
実行終わり
つぎに
サンプルファイルで ファイルをオープンし
ここから
サンプルファイルを 一行読み出してデータ終り?
ならば 捨てて 打ち切り
さもなければ ダブルクオートで囲んで表示し 改行し
つぎに
繰り返し
サンプルファイルで ファイルをクローズし
サンプルファイルで 論理ファイルを解放すること。
下記のヶ所の「サンプルファイル」の宣言がなくなっており
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは ファイル。
メインの中に「ファイル情報」変数がローカル宣言されていて、「論理ファイルを獲得し」の結果として代入されていることがわかります。
メインとは (・ → ・)
サンプルファイルは ファイル情報
200桁で 論理ファイルを獲得し 真?
ならば サンプルファイルに 入れ
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind fileinfo5 file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> fileinfo5.exe
Mind8
C:\developments\vscode\mind9>mind fileinfo5 file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> fileinfo5.exe
Mind7
C:\developments\vscode\mind9>mind fileinfo5 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 -> fileinfo5.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>fileinfo5
サンプルファイルをオープンしました。
"サンプルテキストファイルの1行目です。"
"サンプルテキストファイルの2行目です。"
"サンプルテキストファイルの3行目です。"
"サンプルテキストファイルの4行目です。"
"サンプルテキストファイルの5行目です。"
サンプルファイルをクローズしました。
C:\developments\vscode\mind9>
いかがでしょうか?「論理ファイル」をグローバル宣言しなくても読み出し処理が正常動作していることがわかります。
参考情報
この小技「論理ファイルを獲得」を使った記述例の記事はまだありません。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。
本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう![]()