You are on page 1of 20

Data Structure & Algorithm

Xây dựng tập tin có cấu trúc


(Structured files)

Nguyễn Tri Tuấn


Khoa CNTT – ĐH.KHTN.Tp.HCM
Email: nttuan@ fit.hcmuns.edu.vn

Structured files

Giới thiệu

Tập tin văn bản thô (plain text)

Tập tin nhị phân (binary)

Tập tin hình ảnh PCX

Tập tin CSDL DBF

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 2

1
Giới thiệu
ªCác thuật ngữ thường dùng:

File structure

File format

File header

Website tham khảo: http://www.wotsit.org/

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 3

Giới thiệu (tt)


ªFile là một cách thức lưu trữ dữ liệu phổ biến
trên bộ nhớ phụ

ªDữ liệu lưu trữ trên file có cấu trúc thích hợp
à hiệu suất truy xuất cao

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 4

2
Giới thiệu (tt)
ªDữ liệu lưu trữ trên file thường theo 2 dạng phổ
biến:
Dữ liệu text thô (plain text)
Dữ liệu nhị phân (binary)

File dữ liệu plain text File dữ liệu nhị phân


Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 5

Structured files

Giới thiệu

Tập tin văn bản thô (plain text)

Tập tin nhị phân (binary)

Tập tin hình ảnh PCX

Tập tin CSDL DBF

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 6

3
Plain text
ªPlain text phi cấu trúc:
Không phân hoạch theo
ý nghĩa, chức năng
Rất khó xử lý

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 7

Plain text, có cấu trúc


[SQL Server (32 bit)]
Driver=H:\WINNT\System32\sqlsrv32.dll
Setup=H:\WINNT\System32\sqlsrv32.dll
32Bit=1

Tập tin định cấu hình


Tập tin định driver WinCommander
kết nối DB (ODBC.INI) (WINCMD.INI)

[left]
path=I:\DCIM\101MSDCF\
ShowAllDetails=1
show=1
sortorder=3
negative Sortorder=1
[right]
path=F:\Nguyen Tri Tuan\

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 8

4
Plain text, có cấu trúc (tt)
ªĐịnh nghĩa:
Dữ liệu được chuyển thành dạng chuỗi (string) và lưu
lên file theo một qui tắc nhất định

ªCác tính chất:


Dễ truy xuất và xử lý
Dễ thay đổi nội dung khi cần
Độ bảo mật kém
Tốc độ truy xuất chậm
Kích thước lớn
VD. Lưu số nguyên 12345 ở dạng binary (2 bytes) và dạng
chuỗi (5 bytes)

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 9

Plain text, có cấu trúc (tt)


ªCác dạng thường gặp:

File cấu hình phần mềm (*.INI, *.CFG)

File *.HTML, *.XML

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 10

5
Plain text, có cấu trúc (tt)
// Minh họa đoạn code tạo file WINCMD.INI

FILE *f;
char path[MAX_LEN];
int showAllDetails, show;
int sortOrder, negativeSortOrder;

f = fopen(“wincmd.ini”, “wt”);
fprintf(f, “[left]\n”);
fprintf(f, “path=%s\n”, path);
fprintf(f, “ShowAllDetails=%i\n”, showAllDetails);
fprintf(f, “show=%i\n”, show);
fprintf(f, “sortorder=%i\n”, sortOrder);
fprintf(f, “negative Sortorder=%i\n”,
negativeSortOrder);
fclose(f);

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 11

Structured files

Giới thiệu

Tập tin văn bản thô (plain text)

Tập tin nhị phân (binary)

Tập tin hình ảnh PCX

Tập tin CSDL DBF

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 12

6
Tập tin nhị phân
ªĐịnh nghĩa:
Dữ liệu được lưu trên file giống như cách mà nó
thường được lưu trong bộ nhớ chính
Dữ liệu thường lưu dạng record
typedef struct {
unsigned int ID; ID 4 bytes
char name[30];
float avgPoint;
} STUDENT; name 30 bytes

// strucsize (in memory)


avgPoint 4 bytes
// = 38 bytes

Memory block of STUDENT

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 13

Tập tin nhị phân (tt)


// Minh họa đoạn code đọc dữ liệu file STUDENTS.DAT

FILE *f;
STUDENT oneStudent;

// open file to read


f = fopen(“students.dat”, “rb”);
while (fread(&oneStudent, sizeof(STUDENT), 1, f)) {
// xử lý record oneStudent

}
fclose(f);

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 14

7
Tập tin nhị phân (tt)

#define MAX_LEN 128


path 128 bytes
typedef struct {
char path[MAX_LEN];
showAllDetails 4 bytes
int showAllDetails;
int show;
show 4 bytes
int sortOrder;
int negativeSortOrder;
} WINCMD_CFG; sortOrder 4 bytes

// strucsize (in memory) negativeSortOrder 4 bytes


// = 144 bytes

Memory block of WINCMD_CFG

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 15

Tập tin nhị phân (tt)


// Minh họa đoạn code tạo file WINCMD.CFG

FILE *f;
WINCMD_CFG leftPanelCfg, rightPanelCfg;

// tạo file
f = fopen(“wincmd.cfg”, “wb”);
// tạo 1st record
fwrite(&leftPanelCfg, sizeof(WINCMD_CFG), 1, f);
// tạo 2nd record
fwrite(&rightPanelCfg, sizeof(WINCMD_CFG), 1, f);

fclose(f);

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 16

8
Tập tin nhị phân (tt)
ªCác tính chất:
Dễ truy xuất và xử lý
Tốc độ truy xuất nhanh
Tính bảo mật cao hơn

ªChiếm phần lớn số file đang được dùng trên


máy tính
Các file dữ liệu riêng, có cấu trúc tự tổ chức
*.DOC, *.XLS, *.PDF, *.PPT
*.JPG, *.PCX, *.BMP, *.TIF
*.MP3, *.WAV, *.AVI, …

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 17

Tập tin nhị phân (tt)


ªHai dạng file nhị phân thường dùng:

File có cấu trúc riêng, tự tổ chức

File có cấu trúc chuẩn

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 18

9
Tập tin nhị phân (tt)
ªFile có cấu trúc riêng, tự tổ chức:
Thường được thiết kế chuyên biệt cho ứng dụng
Cấu trúc file được qui ước ngầm định trong ứng dụng
Cấu tạo không phức tạp

VD. File students.dat và file wincmd.cfg

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 19

Tập tin nhị phân (tt)


ªFile có cấu trúc chuẩn:
Được công nhận rộng rãi
Cấu tạo thường phức tạp
Thường được tổ chức dạng file có header

VD. *.DOC, *.XLS, *.DBF, *.PCX,…

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 20

10
Tập tin nhị phân (tt)
ªFile có cấu trúc chuẩn: (tt)
Header: là phần dữ liệu (thường lưu ở đầu file) để
cung cấp thông tin về cấu trúc chi tiết của file đó

Header: Header:
kích thước ảnh (W, H); Số field; tên các
số màu; bảng màu; độ field; kiểu dữ liệu
phân giải;… các field; số
record; ngày cập
nhật;…

Dữ liệu điểm ảnh Dữ liệu các record

File ảnh (bitmap) File CSDL (table)

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 21

Tập tin nhị phân (tt)


ªHeader: (tt) Có 2 dạng header phổ biến:
Header tĩnh:
Kích thước của header không thay đổi trong mọi trường hợp
Dùng cho các file có cấu tạo không phức tạp;
và các thành phần cấu tạo không thay đổi

VD. File ảnh bitmap PCX: header 128 bytes

Header động:
Kích thước header thay đổi tùy file
Dùng cho các file có thành phần cấu tạo biến thiên

VD. Bảng (table) có số field thay đổi từ 1 – 255 fields


Ảnh bitmap có bảng màu thay đổi từ 2 màu – 16 triệu màu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 22

11
Structured files

Giới thiệu

Tập tin văn bản thô (plain text)

Tập tin nhị phân (binary)

Tập tin hình ảnh PCX

Tập tin CSDL DBF

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 23

Tập tin hình ảnh *.PCX


ªLịch sử hình thành, công dụng

ªẢnh bitmap

ªCấu trúc header

ªLưu trữ dữ liệu điểm ảnh

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 24

12
Tập tin hình ảnh *.PCX (tt)
ª Lịch sử hình thành, công dụng:
Được xây dựng ~1985, bởi công ty ZSoft Corporation
Là một trong các chuẩn tập tin dùng để lưu ảnh bitmap đầu tiên;
được dùng trong phần mềm PC PaintBrush
Cho phép lưu các ảnh bitmap đơn; dạng 2 màu, 16 màu, 256
màu, 16 triệu màu
Được hỗ trợ trong nhiều phần mềm xử lý ảnh
Là dạng file nhị phân có cấu trúc header tĩnh
Mã Version
0 2.5 (dùng cho PC Paintbrush – DOS)
2 2.8 có bảng màu (palette)
3 2.8 không có bảng màu
4 Dùng cho PC Paintbrush Windows
5 3.0 (dùng cho PC Paintbrush, Publisher’s
Paintbrush). Thể hiện được ảnh 24 bits màu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 25

Tập tin hình ảnh *.PCX (tt)


ªẢnh bitmap:
Là một ma trận các điểm ảnh (pixel)
Kích thước W cột, H dòng (W*H pixels)
Có một số lượng hữu hạn màu để thể hiện các pixel
Loại ảnh trắng đen (2 màu)
Loại ảnh 16 màu
Loại ảnh 256 màu
Loại ảnh 16 triệu màu
Các màu được lưu thành
bảng màu (Palette)

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 26

13
Tập tin hình ảnh *.PCX (tt)
ªẢnh bitmap: (tt)
Mỗi màu được tạo thành từ 3 thành phần cơ bản
(Red, Green, Blue), mỗi thành phần biểu diễn bằng 1
byte à cần 3 bytes/màu
Mỗi pixel được biểu diễn bằng 1 số lượng bit tùy theo
số lượng màu
2 màu à 1 bit/pixel
16 màu à 4 bits/pixel
256 màu à 8 bits/pixel
16 triệu màu à 24 bits/pixel
Các thông số khác:
Độ phân giải (DPI)
Hình thức nén dữ liệu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 27

Tập tin hình ảnh *.PCX (tt)


ªCấu trúc header:
Header: Header:
kích thước ảnh (W, H); kích thước ảnh (W, H);
số màu; bảng màu; độ số màu; bảng màu; độ
phân giải;… phân giải;…
(Header size = 128 (Header size = 128
bytes) bytes)

Dữ liệu điểm ảnh Dữ liệu điểm ảnh

Header mở rộng (768


bytes) = bảng màu 256
File *.PCX: 2, 16 màu hay 16
màu
triệu màu

File *.PCX: 256 màu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 28

14
Tập tin hình ảnh *.PCX (tt)
ª Cấu trúc header: (tt)
Offset Chiều dài Thành phần Ý nghĩa
0 1 Manufacturer Hằng số để nhận dạng loại file PCX (= 10: ZSoft .PCX)
1 1 Version Version
2 1 Encoding Cờ cho biết hình thức mã hóa dữ liệu pixel
(1: nén PCX RLE; 0: không nén)
3 1 BitsPerPixel Số bit dữ liệu dùng cho 1 pixel (trên 1 scan line).
Giá trị 1, 4, 8
4 2 Xmin Tọa độ X của góc trên trái
6 2 Ymin Tọa độ Y của góc trên trái
8 2 Xmax Tọa độ X của góc dưới phải
10 2 Ymax Tọa độ Y của góc dưới phải

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 29

Tập tin hình ảnh *.PCX (tt)


ª Cấu trúc header: (tt)
Offset Chiều dài Thành phần Ý nghĩa
12 2 HDPI Độ phân giải ngang (DPI)
14 2 VDPI Độ phân giải dọc (DPI)
16 48 ColorPalette Bảng màu của ảnh 2/16 màu (2/16 entries)
64 1 Reserved Dành riêng (= 0)
65 1 ColorPlane Giá trị Color Plane
66 2 BytesPerLine Số byte thực sự được lưu cho 1 scan line.
Luôn làm tròn word
68 2 PaletteInfo Thông tin về Palette (1: Color/B&W; 2: Grayscale)
70 58 Filter Không dùng (= 0)

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 30

15
Tập tin hình ảnh *.PCX (tt)
ª Cấu trúc header: (tt)
W = Xmax – Xmin + 1 (cột)
H = Ymax – Ymin + 1 (dòng)
Số màu:
BitPerPixel Color Plane Số màu
1 1 B/W
1 4 16 màu
4 1 16 màu
8 1 256 màu
8 3 24 bits màu (16 tr màu)

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 31

Tập tin hình ảnh *.PCX (tt)


// Cấu trúc mô tả 1 thành phần màu (RGB)

typedef struct RGB_ENTRY {


unsigned char R;
unsigned char G;
unsigned char B;
};

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 32

16
Tập tin hình ảnh *.PCX (tt)
// Cấu trúc dữ liệu để lưu PCX Header
// giả sử đang dùng HĐH 16 bits
typedef struct PCX_HEADER {
unsigned char manufacturer;
unsigned char version;
unsigned char encoding;
unsigned char bitsPerPixel;
unsigned int xMin, yMin, xMax, yMax;
unsigned int hDPI;
unsigned int vDPI;
RGB_ENTRY colorPalette[16];
unsigned char reserved;
unsigned char colorPlane;
unsigned int bytesPerLine;
unsigned int paletteInfo;
char filter[58];
};
Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 33

Tập tin hình ảnh *.PCX (tt)


// Chương trinh minh họa đọc *.PCX header
FILE *f;
PCX_HEADER pcxHeader;
RGB_ENTRY _256ExtendColorPalette[256];

f = fopen(“xyz.pcx”, “rb”);

fread(&pcxHeader, sizeof(PCX_HEADER), 1, f);

// Nếu file 256 màu à đọc palette mở rộng ở cuối file


if (pcxHeader.bitsPerPixel==8 && pcxHeader.colorPlane==1){
int n = 256*sizeof(RGB_ENTRY);

fseek(f, -n, SEEK_END);


fread(_256ExtendColorPalette, sizeof(RGB_ENTRY), 256, f);
}

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 34

17
Tập tin hình ảnh *.PCX (tt)
ªLưu trữ dữ liệu điểm ảnh:

Pixel trên ảnh Dữ liệu được lưu trữ


0 0 1 0 1 0

Ảnh B/W (1 bit/pixel) – Không cần sử dụng Palette


Black à bit = 0
White à bit = 1
8 pixels à 1 byte dữ liệu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 35

Tập tin hình ảnh *.PCX (tt)


ªLưu trữ dữ liệu điểm ảnh: (tt)
0
Pixel trên ảnh 1
2

.
.
.
Dữ liệu được lưu trữ
0 0 0 1 1 0 0 1 9

15

Ảnh 16 màu (4 bits/pixel) – Palette có 16 phần tử


2 pixels à 1 byte dữ liệu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 36

18
Tập tin hình ảnh *.PCX (tt)
ªLưu trữ dữ liệu điểm ảnh: (tt)
0
1

Pixel trên ảnh 2

.
.
Dữ liệu được lưu trữ .
41
0 0 1 0 1 0 0 1

255

Ảnh 256 màu (8 bits/pixel) – Palette có 256 phần tử


1 pixel à 1 byte dữ liệu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 37

Tập tin hình ảnh *.PCX (tt)


ªLưu trữ dữ liệu điểm ảnh: (tt)

Pixel trên ảnh

Dữ liệu được lưu trữ

0 0 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 0

R G B

Ảnh 16 triệu màu (24 bits/pixel) – Không cần dùng Palette


1 pixel à 3 bytes dữ liệu

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 38

19
Thank you
for your attention

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 39

Q&A

Sprint 2006 Data Structure & Algorithm - Structured files - Nguyen Tri Tuan, DH.KHTN Tp.HCM 40

20

You might also like