IniFiles单元为borland delphi中读取后缀名为ini文件的单元集合,为方便开发人员在读取ini文件内容时提供一些基本操作函数,在该单元中一共有三个ini文件操作类(TCustomIniFile 、TIniFile、TMemIniFile),一个异常类EIniFileException,两个哈希类(TStringHash、THashedStringList),还有一个基础record(THashItem)。
THashItem为数据存储单元,看下它的定义
THashItem = record
Next: PHashItem; ---记录下一个hashItem的指针
Key: string; ---hashItem标识
Value: Integer; ---hashItem值
end;
TStringHash是数据单元ThashItem的集合类,其中定义了一个名为Buckets的PHashItem单元数组,还有一些对该数据的操作方法:
TStringHash = class
private
Buckets: array of PHashItem; --定义对hashitem单元的数组集合
protected
function Find(const Key: string): PPHashItem; --根据key值查找返回对应的ThashItem
function HashOf(const Key: string): Cardinal; virtual; --内部操作函数
public
constructor Create(Size: Cardinal = 256);
destructor Destroy; override;
procedure Add(const Key: string; Value: Integer); --增加关键值和数值
procedure Clear;
procedure Remove(const Key: string);
function Modify(const Key: string; Value: Integer): Boolean; --修改关键值对应的数值
function ValueOf(const Key: string): Integer;
end;
THashedStringList为一个tstringlist,其中用到tstringHash来增加寻找的速度。其中Tstringhash跟ThashedStringList和TstringList最大的不同在于TStringList中key为string值,而value为integer值。以下为自我写的一个对该hashedstringlist和stringhash操作的例子.
unit PrjHashOper;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
Stringhash: TStringHash;
HashStrLst: THashedStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
Stringhash := TStringHash.Create;
HashStrLst := THashedStringList.Create;
for i := 97 to 123 do
begin
Stringhash.Add(chr(i), i);
HashStrLst.Add(Char(i) + '=' + IntToStr(i));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(HashStrLst.Values['z']);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Stringhash.ValueOf('z')));
end;
end.