IniFiles 单元内容学习(一)

    技术2024-11-08  23

      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.

     

    最新回复(0)