Delphiのファイル操作

5261 ワード

参考自:http://www.cnblogs.com/railgunman/articles/1800318.html
Delphiではデフォルトではinputとoutputの2つのファイル変数があります.ただし、inputは読み取り専用で、Outputは書き込みのみです.異常を起こさないように注意して使用してください.
ファイルはファイル名によって識別されるデータセットで、ファイルは通常ディスク上に存在します.ソースプログラム、学生ファイル記録、グラフィック、音楽などはすべてファイルとしてディスクに保存できます.オペレーティングシステムはファイル単位でデータを管理しています.つまり、外付けメディアのデータを読み込むには、ファイル名で指定されたファイルを見つけてからファイルからデータを読み込む必要があります.外付けメディアにデータを格納するには、まずファイルを作成してから彼にデータを出力する必要があります.
プログラムが実行されるときは、いくつかのデータ(運転の最終結果または中間データ)をディスクに出力して、後で必要なときはコンピュータメモリに入力します.これはディスクファイルを使います.
1.ファイルタイプ
fileはファイルタイプの引数であり、fileによってファイル変数を定義することができます.また、いくつかの新しいタイプを定義することもできます.Delphiでは、テキストファイル、タイプファイル、およびタイプなしファイル(バイナリファイルともいいます)の3種類がサポートされています.次の手順では、3種類のファイルタイプ変数の定義と使用方法を紹介します.
Delphiプログラム設計では、どのファイルに対しても操作が要約されます.作成->開く->読み書き->閉じることができます.
2.テキストファイル
2.1テキストファイルの概念
DelphiではTextFIleタイプがテキストファイルを表しています.文字のASCIIコードのホームフィールドでもできます.最小アクセス単位は文字です.テキストファイルはASCIIコードファイルにもなります.よくあるテキストエディタを使ってファイルの内容を閲覧できます.
テキストファイルは行単位で読み、書きます.各行の長さが必ずしも同じではないので、与えられた行のファイル内の正確な位置は計算できません.したがって、順番に読み書きするしかないです.開いているテキストファイルを同時に読んだり、書いたりすることは許されません.
2.2文書ファイル変数の定義
テキストファイルを定義するシンタックス書式は以下の通りです.
var

    //<     > : TextFile;

    myTextFile : TextFile;

    //                myTextFile,                  

2.3文書ファイルの使用
<1>ファイル変数とテキストの関連付け
ファイル変数を使って操作する前に、文書ファイルを操作したいファイルに関連付ける必要があります.すなわち、ファイル変数名に値を割り当てます.ファイル変数の値は、プロセスのAsignFileを使用することができます.プロセスの構文フォーマットは以下の通りです.
procedure AssignFile(Var F; FileName : String);

ここで、Fはファイル変数名であり、無種類のパラメータとして定義されるのは、すべてのファイルタイプとの互換性のためである.FileNameはファイル名文字列で、パスを含むファイルのフルネームです.例えば
AssignFile(F, 'E:\delphi\program\test.txt');

ファイル変数Fと指定されたファイルE:\delphi\program\test.txtを関連付ける.後のすべての変数Fに対する操作は、指定されたファイルに対する操作です.
<2>ファイル変数を使ってファイルを開く
異なるプロセスでファイルを開くには、3つの方法があります.
procedure ReWrite(var F: File[; recsize :word]);

ReWriteプロセスはファイルを作成して開き、ファイルを書き込みできます.ここのFは指定されたファイル名に関連付けられたファイル変数です.既存のファイルに対して、この操作はソースファイルを上書きします.ファイルが存在しない場合は、新しい空のファイルを作成します.タイプファイルの場合は、recsiezeでサイズを指定できます.
procedure Reset(var F : File[; RecSize : Word]);

Resetプロセスを使用してファイルを読むと、ファイルからしかデータを読み込めません.Fはファイル変数です.ファイルを開いたら、ファイルの先頭を指します.Resetプロセスで存在しないファイルを開けようとしたら、I/Oエラーが発生します.
procedure Append(var F: Text);

Apendプロセスを使用して既存のファイルにテキストを追加します.このプロセスはテキストファイルにのみ使用されます.appedプロセスでファイルを開くと、ファイルポインタはファイルの末尾を指し、その後入力したデータは元のデータの後ろに追加されます.このプロセスで開いているファイル(F関連のファイル)は必ず存在します.そうでないとI.Oエラーも発生します.
<3>ファイルを読み/書きます.
1)ファイルの内容を読みだします.ファイルを読んで開くと、readとreadln文を使ってファイル内の内容を読み取ることができます.コードフォーマットはそれぞれ以下の通りです.
procedure read([var F:Text; ]V1[, V2, ..., Vn]);

procedure readln([var F:Text;] V1[,V2, V3,...Vn]);

ここで、Fはテキストファイルである.v 1、v 2、…、Vnなどは入力が必要な変数であり、そのタイプは文字列、文字列、整数、実数タイプとすることができます.readとreadlnの違いは、後者がデータを読み取った後、ファイルポインタを次の行に移動し、前回読み取ったデータとリターンのデータが無視されることです.
文字列を読み取るときは、readlnプロセスを使用しなければなりません.一行のデータを読み終わった後、readを使って文字列を読み取ると、空の列が得られます.全体と実数のデータを読み込む場合、ファイル中のデータはスペースで区切られ、データフォーマットを複合する必要があります.そうでないとI/Oエラーが発生します.
ファイルを読み込む際には、ファイルポインタがファイルの最後に来ているかどうかを判断する必要があります.このときは、Eof関数を使って判断できます.そのコードは以下の通りです.
function Eof([(var F : Text)]) : Boolean;

 
ファイルポインタが末尾を指すとき、この関数の戻り値はtrueです.
2))ファイルにデータを書き込みます.書き込みでファイルを開くと、そこにデータを書き込むことができます.書き込みはwriteとwritelnプロセスを使います.そのコードは以下の通りです.
procedure writeln([var F:Text;] p1[, p2, ..., pn]);

procedure write([var F :Text;] p1 [,p2, ...,pn]);

readと似ていますが、p 1、p 2…pnなどは出力が必要な変数で、文字列、文字列、整数、実数タイプとなります.writelnはデータを書き込むと、リターンと改行が付加されますが、次の書き込みのデータは新しい行に書きます.
データを書き込む時、システムは自動的にデータを文字列に変換してファイルに保存します.
<4>ファイル変数を使ってファイルを閉じます.
入出力もファイル操作が完了したら、ファイルを閉じます.ファイルを閉じてClose Fileプロセスを使って、そのコードの声明は以下の通りです.
procedure CloseFile(var F);

ファイルを閉じた後、システムはファイルを開くときに使うリソースを解放します.特にファイルを書く時は、writeとwritelnプロセスを呼び出した時に、データを先にメモリバッファに書き込み、バッファが満杯またはファイルが閉じられた時にのみデータをディスクファイルに書き込めますので、データを書き終わったらファイルを閉じないとデータが無くなります.
例として、ReWrite()プロセスを使って、プログラムが実行している現在のディレクトリの下でテキストファイルfile.txtを作成し、ファイルに5行のテキストを追加します.
var

    textf : TextFile;    //      

    S : String;

    I : Integer;

begin

    AssignFile(textf, 'file.txt');    //     textf       “file.txt”    

    ReWrite(textf);    //                  

    for I := 1 to 5 do

    begin

        S := 'this is Line #';

        writeln(textf, s, i);;

    end;

    CloseFile(textf);    //         

end.

作成されたファイルには5行のテキストが含まれています.例えば、3行目:This line嗳3
既存のファイルに新しいテキストを追加するには、その中のrewriteをappedに変更します.以上のプログラムは文字列と整数をファイルに書き込みます.実は、Object Pascalはすべてのデータタイプに対してこのように処理できます.以下の手順では、テキストファイルからデータを読み取る方法を示します.
//    

var

    F : TextFile;

begin

    AssignFile(F, 'c:\test.txt');;

    rewrite(F);

    writeln(F, '           ');

    CloseFile(F);

end;

  
//    

var

    F :TextFile;

    str : String;

begin

    AssignFile(F, 'c:\test.txt');

    Reset(F);    //Open the file for reading

    Readln(F, str);

    ShowMessage('1, line of textfile:' + str);

    CloseFile(F);    

end;