TINIFile
Một lớp đơn giản để xử lý tệp ini
Một lớp đơn giản để xử lý tệp ini
Tệp ini là một file văn bản có cấu trúc khá đơn giản, có thể xem như một cơ sở dữ liệu nhỏ. Có thể đọc nội dung bên trong tệp ini dễ dàng và chỉnh sửa không phức tạp.
Tệp ini phù hợp cho việc lưu trữ những dữ liệu nhỏ, đơn giản và nhanh chóng. Tuy nhiên, giới hạn tệp ini là 64 KB.
Tệp ini có cấu trúc gồm 3 phần: Section, Ident và Value
[Section1]
Ident1=Value1
[Section2]
[Section3]
Ident2=Value2
Ident3=Value3
Như trên là một file ini đơn giản, gồm 3 section. Mỗi section có thể chứa hoặc không chứa các cặp ident-value, phân cách bằng dấu bằng (=).
Để lấy được giá trị Value, bạn cần biết nó ở Section nào, có Ident là gì.
Lưu ý: Delphi không phân biệt chữ hoa và chữ thường trong tên section & ident. Như vậy, Section3, SECTION3 hay SeCTiON3 đều như nhau.
Để sử dụng class TINIFile, bạn cần khai báo unit System.IniFiles. (chú ý đến chữ s ở cuối)
Lớp TINIFile cung cấp khá nhiều các hàm, thủ tục tiện lợi để xử lý tệp ini. Vì đây là một class nên chúng ta cần thực thể hóa nó thành một đối tượng trước khi sử dụng.
var
ini: TINIFile;
begin
ini := TINIFile.Create('D:\New.ini');
try
...
finally
ini.Free;
end;
end;
Hàm tạo Create được ghi đè với tham số là đường dẫn đến file ini. Nếu file đã có sẵn thì sẽ được mở ra luôn, còn nếu không tồn tại thì file ini mới sẽ được tạo ra.
Có hai thao tác cơ bản trên ini file là đọc (read) và ghi (write). Đối với các kiểu dữ liệu khác nhau, lớp TINIFile có các method khác nhau. Chúng ta sẽ lấy ví dụ bằng kiểu Integer.
ini.WriteInteger('Section2', 'NewIdent', 100);
Sử dụng lại file ini ở trên, sau khi thực hiện câu lệnh, file ini sẽ được thay đổi như sau
[Section1]
Ident1=Value1
[Section2]
NewIdent=100
[Section3]
Ident2=Value2
Ident3=Value3
Như các bạn thấy, một cặp NewIdent=100 được chèn vào section2.
Lưu ý: Nếu chèn vào mà trong đó đã có sẵn giá trị rồi thì giá trị sẽ bị ghi đè lên.
Ngược lại, để đọc dữ liệu từ file Ini, chúng ta sử dụng method ReadInteger.
var
X: Integer;
...
X := ini.ReadInteger('Section2', 'NewIdent');
Biến X lúc này mang giá trị 100 lấy từ file ini.
Đối với các kiểu dữ liệu khác như float, string, boolean, ... cũng có các method chuyên dụng như WriteFloat, ReadString, ... phù hợp.
Đôi khi chúng ta muốn lấy danh sách các sections có trong file ini, TINIFile có một method hỗ trợ làm việc đó.
Việc lấy danh sách (danh sách section ở phần này hoặc phần tiếp theo) đều cần thông qua một TStringList.
var
ini: TINIFile;
s: TStringList;
begin
ini := TINIFile.Create('New.ini');
s := TStringList.Create;
try
ini.ReadSections(s);
...
finally
ini.Free;
s.Free;
end;
end;
Như trên, chúng ta sử dụng method ReadSections (có chữ s phía sau) để lấy danh sách các section vào biến s (TStringList). Sau đó chúng ta có thể dùng vòng lặp để hiển thị như trong bài Các lớp thông dụng \ TStringList đã đề cập.
Khác với lấy danh sách các sections ở phần trước, phần này đề cập đến việc lấy danh sách các ident của một section cụ thể. Ví dụ như bạn cần biết section3 chứa các ident nào, thì lớp TINIFile cung cấp một method là ReadSection (không có chữ s phía sau, cần chú ý kĩ).
Cách sử dụng tương tự như phần 4 ở trên. Chỉ khác câu lệnh thôi.
var
ini: TINIFile;
s: TStringList;
begin
ini := TINIFile.Create('New.ini');
s := TStringList.Create;
try
ini.ReadSection(s);
...
finally
ini.Free;
s.Free;
end;
end;