Pascal-files-handling

提供:Dev Guides
移動先:案内検索

パスカル-ファイル処理

Pascalは、ファイルを一連のコンポーネントとして扱います。コンポーネントのタイプは統一されている必要があります。 ファイルのタイプは、コンポーネントのタイプによって決まります。 ファイルのデータ型は次のように定義されています-

type
file-name = file of base-type;

ここで、base-typeはファイルのコンポーネントのタイプを示します。 基本タイプは、整数、実数、ブール値、列挙型、サブレンジ、レコード、配列、セットなど、別のファイルタイプを除きます。 ファイルタイプの変数は、_var_宣言を使用して作成されます-

var
f1, f2,...: file-name;

以下は、いくつかのファイルタイプとファイル変数を定義するいくつかの例です-

type
   rfile = file of real;
   ifile = file of integer;
   bfile = file of boolean;
   datafile = file of record
   arrfile = file of array[1..4] of integer;

var
   marks: arrfile;
   studentdata: datafile;
   rainfalldata: rfile;
   tempdata: ifile;
   choices: bfile;

ファイルの作成と書き込み

学生の記録用のデータファイルを作成するプログラムを作成しましょう。 student.datという名前のファイルを作成し、そこに生徒のデータを書き込みます-

program DataFiles;
type
   StudentRecord = Record
      s_name: String;
      s_addr: String;
      s_batchcode: String;
   end;

var
   Student: StudentRecord;
   f: file of StudentRecord;

begin
   Assign(f,'students.dat');
   Rewrite(f);
   Student.s_name := 'John Smith';
   Student.s_addr := 'United States of America';
   Student.s_batchcode := 'Computer Science';
   Write(f,Student);
   Close(f);
end.

コンパイルして実行すると、プログラムは_students.dat_という名前のファイルを作業ディレクトリに作成します。 メモ帳などのテキストエディタを使用してファイルを開き、John Smithのデータを確認できます。

ファイルからの読み取り

作成して、students.datという名前のファイルに書き込みました。 今、私たちはファイルから学生のデータを読み取るプログラムを書きましょう-

program DataFiles;
type
   StudentRecord = Record
      s_name: String;
      s_addr: String;
      s_batchcode: String;
   end;

var
   Student: StudentRecord;
   f: file of StudentRecord;

begin
   assign(f, 'students.dat');
   reset(f);
   while not eof(f) do

   begin
      read(f,Student);
      writeln('Name: ',Student.s_name);
      writeln('Address: ',Student.s_addr);
      writeln('Batch Code: ', Student.s_batchcode);
   end;

   close(f);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Name: John Smith
Address: United States of America
Batch Code: Computer Science

サブプログラムパラメータとしてのファイル

Pascalでは、ファイル変数を標準およびユーザー定義のサブプログラムのパラメーターとして使用できます。 次の例は、この概念を示しています。 プログラムは、rainrain.txtという名前のファイルを作成し、いくつかの降雨データを保存します。 次に、ファイルを開き、データを読み取り、平均降水量を計算します。

サブプログラムでファイルパラメータを使用する場合、varパラメータとして宣言する必要があることに注意してください。

program addFiledata;
const
   MAX = 4;
type
   raindata = file of real;

var
   rainfile: raindata;
   filename: string;
procedure writedata(var f: raindata);

var
   data: real;
   i: integer;

begin
   rewrite(f, sizeof(data));
   for i:=1 to MAX do

   begin
      writeln('Enter rainfall data: ');
      readln(data);
      write(f, data);
   end;

   close(f);
end;

procedure computeAverage(var x: raindata);
var
   d, sum: real;
   average: real;

begin
   reset(x);
   sum:= 0.0;
   while not eof(x) do

   begin
      read(x, d);
      sum := sum + d;
   end;

   average := sum/MAX;
   close(x);
   writeln('Average Rainfall: ', average:7:2);
end;

begin
   writeln('Enter the File Name: ');
   readln(filename);
   assign(rainfile, filename);
   writedata(rainfile);
   computeAverage(rainfile);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Enter the File Name:
rainfall.txt
Enter rainfall data:
34
Enter rainfall data:
45
Enter rainfall data:
56
Enter rainfall data:
78
Average Rainfall: 53.25

テキストファイル

Pascalのテキストファイルは、各行が行末マーカーで終了する文字の行で構成されます。 次のようなファイルを宣言して定義できます-

type
file-name = text;

通常の文字ファイルとテキストファイルの違いは、テキストファイルが行に分割され、各行が特別な行末マーカーで終了し、システムによって自動的に挿入されることです。 次の例では、contact.txtという名前のテキストファイルを作成して書き込みます-

program exText;
var
   filename, data: string;
   myfile: text;

begin
   writeln('Enter the file name: ');
   readln(filename);

   assign(myfile, filename);
   rewrite(myfile);

   writeln(myfile, 'Note to Students: ');
   writeln(myfile, 'For details information on Pascal Programming');
   writeln(myfile, 'Contact: Tutorials Point');
   writeln('Completed writing');

   close(myfile);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Enter the file name:
contact.txt
Completed writing

ファイルに追加する

ファイルに追加するということは、ファイルを上書きせずに、すでにいくつかのデータがある既存のファイルに書き込むことを意味します。 次のプログラムはこれを示しています-

program exAppendfile;
var
   myfile: text;
   info: string;

begin
   assign(myfile, 'contact.txt');
   append(myfile);

   writeln('Contact Details');
   writeln('[email protected]');
   close(myfile);

   ( *let us read from this file* )
   assign(myfile, 'contact.txt');
   reset(myfile);
   while not eof(myfile) do

   begin
      readln(myfile, info);
      writeln(info);
   end;
   close(myfile);
end.

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point

ファイル処理関数

Free Pascalは、ファイル処理のために次の関数/手順を提供します-

Sr.No. Function Name & Description
1

procedure Append(var t: Text);

追加モードでファイルを開きます

2

procedure Assign(out f: file; const Name:);

ファイルに名前を割り当てます

3

procedure Assign(out f: file; p: PChar);

ファイルに名前を割り当てます

4

procedure Assign(out f: file; c: Char);

ファイルに名前を割り当てます

5

procedure Assign(out f: TypedFile; const Name:);

ファイルに名前を割り当てます

6

procedure Assign(out f: TypedFile; p: PChar);

ファイルに名前を割り当てます

7

procedure Assign(out f: TypedFile; c: Char);

ファイルに名前を割り当てます

8

procedure Assign(out t: Text; const s:);

ファイルに名前を割り当てます

9

procedure Assign(out t: Text; p: PChar);

ファイルに名前を割り当てます

10

procedure Assign(out t: Text; c: Char);

ファイルに名前を割り当てます

11

procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64);

ファイルからメモリにデータを読み取ります

12

procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt);

ファイルからメモリにデータを読み取ります

13

procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal);

ファイルからメモリにデータを読み取ります

14

procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word);

ファイルからメモリにデータを読み取ります

15

procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer);

ファイルからメモリにデータを読み取ります

16

procedure BlockRead(var f: file; var Buf; count: Int64);

ファイルからメモリにデータを読み取ります

17

procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64);

メモリからファイルにデータを書き込みます

18

procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt);

メモリからファイルにデータを書き込みます

19

procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal);

メモリからファイルにデータを書き込みます

20

procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word);

メモリからファイルにデータを書き込みます

21

procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer);

メモリからファイルにデータを書き込みます

22

procedure BlockWrite(var f: file; const Buf; Count: LongInt);

メモリからファイルにデータを書き込みます

23

procedure Close(var f: file);

ファイルを閉じます

24

procedure Close(var t: Text);

ファイルを閉じます

25

function EOF(var f: file):Boolean;

ファイルの終わりを確認します

26

function EOF(var t: Text):Boolean;

ファイルの終わりを確認します

27

function EOF: Boolean;

ファイルの終わりを確認します

28

function EOLn(var t: Text):Boolean;

行末を確認します

29

function EOLn: Boolean;

行末を確認します

30

procedure Erase(var f: file);

ディスクからファイルを削除します

31

procedure Erase(var t: Text);

ディスクからファイルを削除します

32

function FilePos( var f: file):Int64;

ファイル内の位置

33

function FileSize(var f: file):Int64;

ファイルのサイズ

34

procedure Flush(var t: Text);

ファイルバッファをディスクに書き込みます

35

function IOResult: Word;

最後のファイルIO操作の結果を返します

36

procedure Read(var F: Text; Args: Arguments);

ファイルから変数に読み込みます

37

procedure Read(Args: Arguments);

ファイルから変数に読み込みます

38

procedure ReadLn(var F: Text; Args: Arguments);

ファイルから変数に読み込み、次の行に移動します

39

procedure ReadLn(Args: Arguments);

ファイルから変数に読み込み、次の行に移動します

40

procedure Rename(var f: file; const s:);

ディスク上のファイルの名前を変更します

41

procedure Rename(var f: file; p: PChar);

ディスク上のファイルの名前を変更します

42

procedure Rename(var f: file; c: Char);

ディスク上のファイルの名前を変更します

43

procedure Rename(var t: Text; const s);

ディスク上のファイル名を変更する

44

procedure Rename(var t: Text; p: PChar);

ディスク上のファイルの名前を変更します

45

procedure Rename( var t: Text; c: Char);

ディスク上のファイルの名前を変更します

46

procedure Reset(var f: file; l: LongInt);

読み取り用にファイルを開きます

47

procedure Reset(var f: file);

読み取り用にファイルを開きます

48

procedure Reset(var f: TypedFile);

読み取り用にファイルを開きます

49

procedure Reset(var t: Text);

読み取り用にファイルを開きます

50

procedure Rewrite(var f: file; l: LongInt);

書き込み用にファイルを開きます

51

procedure Rewrite(var f: file);

書き込み用にファイルを開きます

52

procedure Rewrite(var f: TypedFile);

書き込み用にファイルを開きます

53

procedure Rewrite(var t: Text);

書き込み用にファイルを開きます

54

procedure Seek(var f: file; Pos: Int64);

ファイルの位置を設定します

55

function SeekEOF(var t: Text):Boolean;

ファイルの位置をファイルの終わりに設定します

56

function SeekEOF: Boolean;

ファイルの位置をファイルの終わりに設定します

57

function SeekEOLn(var t: Text):Boolean;

ファイルの位置を行末に設定します

58

function SeekEOLn: Boolean;

ファイルの位置を行末に設定します

59

procedure SetTextBuf(var f: Text; var Buf);

ファイルバッファのサイズを設定します

60

procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt);

ファイルバッファのサイズを設定します

61

procedure Truncate(var F: file);

ファイルを位置で切り捨てます

62

procedure Write(Args: Arguments);

変数をファイルに書き込みます

63

procedure Write(var F: Text; Args: Arguments);

変数をファイルに書き込む

64

procedure Writeln(Args: Arguments);

変数をファイルに書き込み、改行を追加します

65

procedure WriteLn(var F: Text; Args: Arguments);

変数をファイルに書き込み、改行を追加します