File INI
Tìm hiểu về sử dụng cấu trúc tệp INI như một cơ sở dữ liệu đơn giản
Tìm hiểu về sử dụng cấu trúc tệp INI như một cơ sở dữ liệu đơn giản
Tệp ini (tệp cấu hình) là một trong những cơ sở dữ liệu đơn giản nhất, có thể dễ dàng đọc, chỉnh sửa và thao tác trên nó. Một số thành phần Windows sử dụng tệp này để lưu những thông tin nhỏ, đơn cử như tệp boot.ini và desktop.ini (tệp ẩn).
Tệp ini phù hợp cho những khối lượng dữ liệu nhỏ gọn, đơn giản và nhanh chóng. Tuy nhiên, hạn chế của nó là giới hạn 64 KB dữ liệu.
Một tệp ini có cấu trúc đơn giản 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 nhiều cặp ident-value, hoặc không chứa cặp nào.
Unit System.IniFiles (có s phía sau) cung cấp cho chúng ta lớp TIniFile (không có s) để hỗ trợ truy cập, đọc ghi dữ liệu vào file.
var
ini: TIniFile;
...
begin
ini := TIniFile.Create('New.ini');
try
// Làm gì đó
finally
ini.Free;
end;
end.
Như trên là cấu trúc mở một file ini có sẵn để đọc và ghi, nếu file không tồn tại sẽ được tạo mới.
Chúng ta có thể đọc ghi từ file ini các kiểu dữ liệu cơ bản: số nguyên, số thực, boolean, string hoặc ngày tháng (Extended)
Dưới đây là ví dụ cho đọc ghi một số Integer vào ini. Các kiểu khác thực hiện tương tự
ini.WriteInterger('Section2', 'NewIdent', 100);
Câu lệnh trên cần được đặt trong khối try, dùng để thêm một ident tên NewIdent với giá trị 100 vào Section2 của file ini ví dụ trước đó.
[Section1]
Ident1=Value1
[Section2]
NewIdent=100
[Section3]
Ident2=Value2
Ident3=Value3
Đây là file ini sau khi thực hiện câu lệnh trên.
Để đọc một số nguyên Integer từ file ini ta dùng đoạn code
Write(ini.ReadInteger('Section2', 'NewIdent'));
Nếu đọc được sẽ hiển thị ra màn hình số 100.
Đối với các kiểu dữ liệu khác sẽ có những phương thức tương tự như WriteString, ReadString, WriteFloat, ReadFloat, ...
Giả sử ta không biết file ini đó có chứa các section nào và tên gì, hãy sử dụng thủ tục ini.ReadSections(có s) để lấy danh sách các Sections.
Cần một object kiểu TStringList để lưu danh sách các sections.
var
ini: TIniFile;
s: TStringList;
i: Word;
begin
ini := TIniFile.Create('New.ini');
s := TStringList.Create;
try
ini.ReadSections(s);
// Đọc tất cả sections vào danh sách s
// In ra màn hình
for i := 0 to s.Count-1 do
WriteLn(s[i]);
finally
ini.Free;
s.Free;
end;
end.
Còn việc đọc tất cả các ident của một section nào đó, chẳng hạn Section1, thì ta chỉ cần thêm một tham số là tên ident và sử dụng hàm ini.ReadSection (không có s ở cuối - cần phân biệt), như ví dụ sau
var
ini: TIniFile;
s: TStringList;
i: Word;
begin
ini := TIniFile.Create('New.ini');
s := TStringList.Create;
try
ini.ReadSection('Section1', s);
// Đọc tất cả ident trong section1 vào danh sách s
// In ra màn hình
for i := 0 to s.Count-1 do
WriteLn(s[i]);
finally
ini.Free;
s.Free;
end;
end.