大阪本社 Mです。
今日はDelphiでのrecordの便利な使用方法を紹介します。
record型変数をTListに格納しメンバー名でアクセスする方法です。
これだけだと何のこっちゃという感じなのでサンプルコードを見てください。
■サンプルコード■
-----------------------------------------------
type
// record型定義
TSyainRec = record
社員番号: integer;
氏名: string;
end;
//TSyainRecのポインタ型
PSyainRec = ^TSyainRec;
・
・
・
・
var
SyainList:TList;
SyainRec: PSyainRec;
i: integer;
begin
// リストを生成
SyainList := TList.create;
// 社員番号と社員名をリストに格納
new(SyainRec);
SyainRec^.社員番号 := 1;
SyainRec^.氏名 := 'シンプル 太郎';
SyainList.Add(SyainRec);
new(SyainRec);
SyainRec^.社員番号 := 2;
SyainRec^.氏名 := 'シンプル 次郎';
SyainList.Add(SyainRec);
new(SyainRec);
SyainRec^.社員番号 := 3;
SyainRec^.氏名 := 'シンプル 三郎';
SyainList.Add(SyainRec);
// リストに追加したrecord型変数のメンバー名でアクセス
for i := 0 to (SyainList.Count -1) do
begin
Writeln('社員番号:' ,PSyainRec(SyainList[i]).社員番号);
Writeln('氏名:' ,PSyainRec(SyainList[i]).氏名);
end;
// 不要になったらrecord型変数を解放する必要がある。
for i:= 0 to (SyainList.Count -1) do dispose(PSyainRec(SyainList[i]));
//リストも開放
SyainList.free;
end;
-----------------------------------------------
■実行結果■
-----------------------------------------------
社員番号:1
氏名:シンプル 太郎
社員番号:2
氏名:シンプル 次郎
社員番号:3
氏名:シンプル 三郎
-----------------------------------------------
ポイントはPSyainRec(SyainList[i]).社員番号のようにすることで
リストに格納したrecord型変数のメンバー名でアクセスできるところです。
データベースから取得したデータを変数に入れて扱うときなどに
record型変数のメンバー名をデータベースの列名と同じにしておけば、
非常にわかりやすくなるのではないでしょうか。
ただしこの方法の場合、不要になったrecord型変数はいちいち
開放してやる必要がある、というのが欠点でしょうか。
いちいち開放するのはめんどくさいし忘れそう、と思うのは
私だけではないと思います。
同じようなことをするのにジェネリックのTListを利用することで
record型変数を開放する必要が無くなるようなので、
次回はその方法を調べて投稿したいと思います。