はじめに
日本語プログラミング言語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"。
ファイルをオープンして論理ファイルを返すとは (バッファサイズ → ・)
バッファサイズは 変数
読出ファイルは ファイル情報
バッファサイズに 入れ
サンプル物理ファイルパスと バッファサイズで 論理ファイルをオープンし
読出ファイルに 入れ
エラー?
ならば 「サンプルファイルのオープンに失敗しました。(」を 表示し
エラー文字列を 表示し 「)」を 一行表示し
実行終わり
つぎに
「サンプルファイルをオープンしました。」を 一行表示し
読出ファイルをかえすこと。
一行読み出してデータ終り?とは 処理単語 YV SQ WO
([クライアント実体]、ファイル情報 → 文字列、真偽)
読出ファイルは ファイル情報
読出バッファは 文字列実体情報
交換し
(→ ファイル管理テーブル、[クライアント実体])
読み出し文字列で 省略時の文字列実体に積み換え 読出バッファに 入れ
読出ファイルに 入れ
読出ファイルから 読出バッファをつかい 一行読み出し
読出ファイルが データ終り?。
ファイルをクローズするとは 処理単語 .V SQ (ファイル情報 → ・)
読出ファイルは ファイル情報
読出ファイルに 入れ
読出ファイルで 論理ファイルをクローズし
「サンプルファイルをクローズしました。」を 一行表示すること。
メインとは (・ → ・)
サンプルファイルは ファイル情報
200桁で ファイルをオープンして論理ファイルを返し サンプルファイルに 入れ
ここから
サンプルファイルを 一行読み出してデータ終り?
ならば 捨てて 打ち切り
さもなければ ダブルクオートで囲んで表示し 改行し
つぎに
繰り返し
サンプルファイルで ファイルをクローズすること。
従来コードはメインの中に「ファイル情報」変数がローカル宣言されているのは同じですが、従来は「論理ファイルを獲得し」の結果として代入されて、ファイルのオープンはその後別にしていたことがわかります。
メインとは (・ → ・)
サンプルファイルは ファイル情報
200桁で 論理ファイルを獲得し 真?
ならば サンプルファイルに 入れ
さもなければ 捨て
「論理ファイルの獲得に失敗しました。」を 一行表示し
実行終わり
つぎに
サンプルファイルで ファイルをオープンし
コンパイル結果
ではコンパイルしてみます。下位ライブラリはfileを指定します。
Mind9
下図はMind9βです。
C:\developments\vscode\mind9>mind fileinfo6 file
日本語プログラミング言語 Mind Version 8.11 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> fileinfo6.exe
Mind8
C:\developments\vscode\mind9>mind fileinfo6 file
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> fileinfo6.exe
Mind7
C:\developments\vscode\mind9>mind fileinfo6 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 -> fileinfo6.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>fileinfo6
サンプルファイルをオープンしました。
"サンプルテキストファイルの1行目です。"
"サンプルテキストファイルの2行目です。"
"サンプルテキストファイルの3行目です。"
"サンプルテキストファイルの4行目です。"
"サンプルテキストファイルの5行目です。"
サンプルファイルをクローズしました。
C:\developments\vscode\mind9>
いかがでしょうか?「論理ファイル」情報がオープン処理で返ってくるので、それを使って読み出し処理が正常動作していることがわかります。
参考情報
この小技「論理ファイルを獲得」を使った記述例の記事はまだありません。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。
本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう![]()