5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語Mindの小技 「論理ファイルをクローズ」~論理ファイル動的確保した場合のクローズ

Last updated at Posted at 2025-10-11

はじめに

日本語プログラミング言語Mindの小技「論理ファイルをクローズ」について説明したいと思います。

対象読者

日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方

この小技に関連するMind言語マニュアル

この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありません。

Mind7の付属の上級者向けドキュメントmind7\doc\file.docmに記載があります。

F4. ファイルのオープン
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

■論理ファイルをクローズ
  --------------------------------
  <ファイル情報> → ・
  --------------------------------
 「論理ファイルをオープン」あるいは「論理ファイルを新規オープン」によってオープンしたファイルのクローズに用います。
 内部処理としては、指定した論理ファイルをまずクローズし、次いで、その論理ファイルのために割り当てていたメモリを「論理ファイルを解放」によって解放します。
 エラーリターンが有ります。エラー要因は通常の「クローズ」と同じです。

本機能(本記事)は、下記のバージョンに対応しています。Mind8のLinux版も対応していると思いますが、本記事では特に検証を行っておりません。

対応バージョン

■Mind7 ■Mind8 ■Mind9
■Windows版 □Linux版

小技の解説

Mindの小技「論理ファイルをクローズ」は、Mindのファイルの基本操作機能の一つです。

ファイルを読み書きするためには、必ず「オープン」して、操作終了後は「クローズ」します。このとき、Mindの場合はファイルの物理パス情報の文字列と「論理ファイル」という変数をセットにして「オープン」します。この「論理ファイル」の宣言は公式マニュアルにはグローバル宣言することが必須となっています。

「論理ファイルをオープン」は「論理ファイル」のグローバル宣言を行わずに内部で動的に確保して「ファイル情報」をスタックに返すことで、ファイルを操作できるようにするものです。

「論理ファイルをオープン」を使った場合は、「クローズ」ではなく必ず「論理ファイルをクローズ」でファイルをクローズする必要があります。「論理ファイルをクローズ」はクローズといっしょに「論理ファイルをオープン」で動的に確保されたファイル管理構造体のメモリ域を解放します。通常の「クローズ」にはこの動作がないので注意が必要です。

本記事では論理ファイルのファイル型変数をグローバルに宣言していた下記の記事に使われたサンプルソースコードを改修して流用します。

Mindプログラムソース

lineread4.src
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
バッファサイズは          数値  200桁。

メインとは (・ → ・)
        サンプルファイルは   ファイル情報
    
    サンプル物理ファイルパスと バッファサイズで 論理ファイルをオープンし
    エラー?
    ならば 捨て 「サンプルファイルのオープンに失敗しました。(」を 表示し
        エラー文字列を 表示し 「)」を 一行表示し
            実行終わり
    つぎに
    サンプルファイルに 入れ    
    「サンプルファイルをオープンしました。」を 一行表示し

    ここから
        サンプルファイルから 一行読み出しし
        サンプルファイルが データ終り?
        ならば 捨て 打ち切り
        つぎに
        (読み出しデータ行を)  一行表示し
    繰り返し

    サンプルファイルで 論理ファイルをクローズし
    「サンプルファイルをクローズしました。」を 一行表示する。

従来コードは「論理ファイル」のファイル変数がグローバル宣言されて、それを使て「オープン」と「クローズ」が処理されていたことがわかります。

lineread.src
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
サンプルファイルは         ファイル。

メインとは (・ → ・)

    サンプル物理ファイルパスで サンプルファイルを オープンし

    ~略~

     サンプルファイルを クローズし
    「サンプルファイルをクローズしました。」を 一行表示する。

修正後のソースコードでは、グローバル宣言された「論理ファイル」のファイル変数ではなく、メインの中にローカル宣言された「ファイル情報」に「論理ファイルをオープン」の結果がセットされています。

lineread4.src
サンプル物理ファイルパスは 文字列定数 "c:\developments\vscode\mind9\sample.txt"。
バッファサイズは          数値  200桁。

メインとは (・ → ・)
        サンプルファイルは   ファイル情報
    
    サンプル物理ファイルパスと バッファサイズで 論理ファイルをオープンし
    ~略~
    サンプルファイルに 入れ    

    ~略~

    サンプルファイルで 論理ファイルをクローズし
    「サンプルファイルをクローズしました。」を 一行表示する。

これに伴い、「クローズ」も「論理ファイルをクローズ」に変更されます。スタック仕様はどちらも「ファイル情報」を引き受けて処理しますので、「クローズ」を誤って使用しないように注意が必要です。

コンパイル結果

ではコンパイルしてみます。下位ライブラリはfileを指定します。

Mind9

下図はMind9βです。

C:\developments\vscode\mind9>mind lineread4 file   

日本語プログラミング言語 Mind Version 8.11 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. C:\mind9-beta\mind9-beta\bin\mindex.exe --> lineread4.exe

Mind8

C:\developments\vscode\mind9>mind lineread4 file

日本語プログラミング言語 Mind Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> lineread4.exe

Mind7

C:\developments\vscode\mind9>mind lineread4 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 -> lineread4.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>lineread4
サンプルファイルをオープンしました。
サンプルテキストファイルの1行目です。
サンプルテキストファイルの2行目です。
サンプルテキストファイルの3行目です。
サンプルテキストファイルの4行目です。
サンプルテキストファイルの5行目です。
サンプルファイルをクローズしました。

C:\developments\vscode\mind9>

いかがでしょうか?「論理ファイル」情報がオープン処理で返ってくるので、それを使って読み出し処理が正常動作していることがわかります。クローズする場合も「論理ファイル」情報を解放するためのクローズ処理が必要です。

ここで、下記のように「クローズ」を使ってしまうと、コンパイルも正常完了して「論理ファイル」情報が解放されないまま実行終了しますので注意してください。実行終了するならば問題ないですが、処理が続くような場合は特に注意が必要です。

lineread4.src

    ~略~

    サンプルファイルを クローズし
    「サンプルファイルをクローズしました。」を 一行表示する。

ある単語内でクローズした後に再度オープンするような場合は、「論理ファイル」情報をただちには解放しない「クローズ」を使って最終的に「論理ファイルを解放」を使ってもよいかもしれませんね。

lineread4.src

    ~略~

    サンプルファイルを クローズし
    サンプルファイルで 論理ファイルを解放し
    「サンプルファイルをクローズしました。」を 一行表示する。

参考情報

この小技「論理ファイルをクローズ」を使った記述例の記事は下記が該当します。

おわりに

いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。

本記事シリーズのご紹介

本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。

興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。

面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう:relaxed:

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?