|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"型付きファイルの読み書き"
■型付きファイルの読み書き
# nifty/FDELPHI/MES/6/14017 からのツリーのまとめ(^^;
■・Form1にButtonを5つ、SpinEditを1つ、Editを3つ置きます。
・入力は Edit1 : Name(氏名)
Edit2 : Address(住所)
Edit3 : Age(年齢)
とします。
■コード
//--------------------------------------------------------------------
type
TPersonData = Record {レコード}
Name : String[20];
Address : String[50];
Age : Byte;
end;
TForm1 = class(TForm)
・
・
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
F:File of TPersonData;
rec:TPersonData;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);//OnCreateでの処理
begin
AssignFile(F, 'Test.dat');
try
Reset(F);// ファイルがあれば開く
except
Rewrite(F);//なければ新規作成
end;
SpinEdit1.MaxValue:=FileSize(F);
SpinEdit1.MinValue:=0;//コードを分かりやすくするため、
end; //MinValueを0にしました
procedure TForm1.Button1Click(Sender: TObject); //挿入
var i:integer;
begin
if SpinEdit1.Value < FileSize(F) then
begin
Reset(F);
for i:=FileSize(F)-1 downto SpinEdit1.Value do
begin
Seek(F,i);
Read(F,rec);//iの位置のデータを読む
Seek(F,i+1);
Write(F,rec)//i+1の位置に書き込み
end;
Seek(F,SpinEdit1.Value)
end
else
Seek(F,FileSize(F)) ;
rec.Name:=Edit1.Text;
rec.Address:=Edit2.Text;;
rec.Age:=StrToInt(Edit3.Text);
Write(F,rec);
SpinEdit1.MaxValue:=FileSize(F);
end;
procedure TForm1.Button2Click(Sender: TObject); //追加
begin
Seek(f,FileSize(F));//Fileの最終位置
rec.Name:=Edit1.Text;
rec.Address:=Edit2.Text;;
rec.Age:=StrToInt(Edit3.Text);
Write(F,rec);
SpinEdit1.Value:=FileSize(F)-1;
SpinEdit1.MaxValue:=FileSize(F);
end;
procedure TForm1.Button3Click(Sender: TObject);//上書き
begin
if SpinEdit1.Value < FileSize(F) then
begin
Seek(F,SpinEdit1.Value);
rec.Name:=Edit1.Text;
rec.Address:=Edit2.Text;;
rec.Age:=StrToInt(Edit3.Text);
Write(F,rec);
end;
end;
procedure TForm1.Button4Click(Sender: TObject); //削除
var i:integer;
begin
if SpinEdit1.Value < FileSize(F) then
begin
if SpinEdit1.Value < FileSize(F)-1 then //最終レコードでない場合
for i:=SpinEdit1.Value to FileSize(F)-2 do
begin
Seek(F,i+1);
Read(F,rec);
Seek(F,i);
Write(F,rec);
end;
Seek(f,FileSize(F)-1);
Truncate(F);//最終レコード削除
SpinEdit1.MaxValue:=FileSize(F);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);//氏名で検索
var DataF:Boolean;
begin
DataF:=False;
Reset(F);
while not EOF(F) do
begin
Read(F,rec);
if (rec.Name) = Edit1.Text then
begin
DataF:=True;
SpinEdit1.Value:=FilePos(F)-1;//該当データの位置
Edit2.Text:=rec.Address;
Edit3.Text:=IntToStr(rec.Age);
Break;
end;
end;
if not DataF then
ShowMessage('No Data');
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);//移動
begin
if SpinEdit1.Value < FileSize(F) then
begin
Seek(F,SpinEdit1.Value);
Read(F,rec);
Edit1.Text:=rec.Name;
Edit2.Text:=rec.Address;
Edit3.Text:=IntToStr(rec.Age);
end
else
begin
SpinEdit1.Value:=FileSize(F);
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(F);
end;
end.
//-------------------------------------------------------------------
_/_/ Athena ( VYH00522 ) _/_/
Original document by Athena 氏 ID:(VYH00522)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|