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.