†Sibylのお部屋†

ファイルの読み込み

作成開始日 2023.01.31
最終更新日 2023.01.31

Pascalの基本的なファイル(テキストファイル)の読み込み方法は;
Var
  f : TEXT;	//テキストファイル型
  st: String;

Begin
  Assign(f,'c:\mydir\myfile.txt');	//ファイルを開く
  ReadLn(f,st);				//ファイルから1行読み込む
  Close(f);				//ファイルを閉じる
で、Sibylが厄介なのは、「text」や「close」が別の機能に割り当てられている為、このままではコンパイラが通らないこと。その場合、元来の機能になるように頭に「system.」をつけてやる必要がある。何てこったい…本当の問題は、その点に関するヘルプ記述がないことだが。

Delphiでも似たような状況だが、「system.Close()」の代わりに「CloseFile()」を使えと書いてあった。Sibylにも「CloseFile()」関数は存在するのだが引数が異なる。機能は?

ここで「TEXT」は、C言語で言うところの「ファイルポインタ型」に相当すると思うのだが、Pascal/Sibyl系ではそうした呼び方はしないようだ。また、「ファイルポインタ」と言う名称は、ファイル内の現在位置を表わすときにも使用されるので紛らわしい。ここではPascal標準の「ファイル型」「テキストファイル型」という名称を使う。

Var
  f : system.TEXT;	//テキストファイル型
  st: String;

Begin
  Assign(f,'c:\mydir\myfile.txt');	//ファイルを開く
  ReadLn(f,st);				//ファイルから1行読み込む
  system.Close(f);			//ファイルを閉じる

ファイルの読み込みループ

ループにして最後まで読み込む場合は、EOF関数で末尾を検出;
  Assign(f,'c:\mydir\myfile.txt');
  While not EOF(f) do
  Begin
    ReadLn(f,st);
    WriteLn(st);		//標準出力に出力する場合
    ListBox1.Items.Add(st);	//ListBox1に出力する場合
  End;
  system.Close(f);

ファイル・ポインタ

ファイル中の現在位置の参照と変更には以下の関数を使用する。ただし、テキストファイルで試した限り、Seekは実行時エラーが出て上手く行かなかった…う〜む。

n:=FilePos(f) ファイル位置の参照
Seek(f,n) ファイル位置の変更


【Sibylのお部屋目次】 【ホーム】