1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Tin học đại cương - Bài 8: Tệp dữ liệu

60 62 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 60
Dung lượng 12,41 MB

Nội dung

Bài giảng Tin học đại cương - Bài 8: Tệp dữ liệu trình bày khái niệm và phân loại tệp; các thao tác với tệp; một số bài tập vận dụng. Mời các bạn cùng tham khảo bài giảng để nắm chi tiết nội dung kiến thức.

Trang 4

8.1.1 Khái niệm

Khái ni m t p ệ ệ

Khái ni m t p ệ ệ

 T p d  li u (T p d  li u (ệệ ữ ệữ ệ File) là m t t p h p các d  li u ) là m t t p h p các d  li u ộ ậộ ậ ợợ ữ ệữ ệ

có liên quan v i nhau và có cùng ki u d  li u. ớ ể ữ ệ

 T p đT p đệệ ượ ưượ ưc l u tr  trên các thi t b  nh  ngoài c l u tr  trên các thi t b  nh  ngoài ữữ ế ịế ị ớớ

(đĩa m m, đĩa c ng, CD­ROM…) v i m t tên ề ứ ớ ộ

nào đó đ  phân bi t v i nhau.ể ệ ớ

Trang 5

Mô hình lưu trữ dữ liệu

Bit – dữ liệu nhỏ nhất (0 hoặc 1)

Byte – 8 bits - Dùng để lưu trữ các ký tự,

số nguyên 1 byte

Trường (Field) – tập các byte dữ liệu

Bản ghi (Record) – tập các trường

Tệp (file) - một tập các bản ghi

Cơ sở dữ liệu (database) - tập các tệp

Trang 6

Mô hình lưu trữ dữ liệu

Trang 7

8.1.2. Phân lo i t p ạ ệ

8.1.2. Phân lo i t p ạ ệ

D a theo b n ch t d  li u c a t p, ng ự ả ấ ữ ệ ủ ệ ườ i 

D a theo b n ch t d  li u c a t p, ng ự ả ấ ữ ệ ủ ệ ườ i 

ta chia t p thành 2 lo i: ệ ạ

ta chia t p thành 2 lo i: ệ ạ

 T p văn b n T p văn b n ệệ ảả

 T p nh  phânT p nh  phânệệ ịị

Trang 8

8.1.2 Phân loại tệp (tiếp)

Trang 9

 N u thông tin đN u thông tin đếế ượược mã hóa là kí t  thì khi đó c mã hóa là kí t  thì khi đó ựự

t p nh  phân tr  thành t p văn b n. Vì v y ệ ị ở ệ ả ậ

t p nh  phân tr  thành t p văn b n. Vì v y ệ ị ở ệ ả ậ

t p văn b n là m t trệ ả ộ ường h p riêng c a t p ợ ủ ệ

t p văn b n là m t trệ ả ộ ường h p riêng c a t p ợ ủ ệ

nh  phân.ị

Trang 10

8.1.3. Vai trò c a t p ủ ệ

8.1.3. Vai trò c a t p ủ ệ

Khi ch ươ ng trình k t thúc ho c khi t t máy  ế ặ ắ

Khi ch ươ ng trình k t thúc ho c khi t t máy  ế ặ ắ

thì các thông tin trong b  nh  chính (RAM)  ộ ớ

thì các thông tin trong b  nh  chính (RAM)  ộ ớ

không còn. 

Mu n l u tr  d  li u lâu dài đ  s  d ng  ố ư ữ ữ ệ ể ử ụ

Mu n l u tr  d  li u lâu dài đ  s  d ng  ố ư ữ ữ ệ ể ử ụ

cho nh ng l n sau ta ph i l u d  li u lên  ữ ầ ả ư ữ ệ

cho nh ng l n sau ta ph i l u d  li u lên  ữ ầ ả ư ữ ệ

t p, t c là đ  d  li u n m   b  nh  ngoài.  ệ ứ ể ữ ệ ằ ở ộ ớ

t p, t c là đ  d  li u n m   b  nh  ngoài.  ệ ứ ể ữ ệ ằ ở ộ ớ

  T p là ph T p là ph ệ ệ ươ ươ ng ti n dùng đ  c t gi  d   ng ti n dùng đ  c t gi  d   ệ ệ ể ấ ể ấ ữ ữ ữ ữ

li u lâu dài ệ

li u lâu dài ệ

Trang 11

Đ ượ ư c l u tr  trên b  nh  trong  ữ ộ ớ

Đ ượ ư c l u tr  trên b  nh  trong  ữ ộ ớ

D  li u c a m ng s  không  ữ ệ ủ ả ẽ

D  li u c a m ng s  không  ữ ệ ủ ả ẽ

Đ ượ ư c l u tr  trên b  nh   ữ ộ ớ

Đ ượ ư c l u tr  trên b  nh   ữ ộ ớ

ngoài

D  li u trên t p t n t i lâu dài,  ữ ệ ệ ồ ạ

D  li u trên t p t n t i lâu dài,  ữ ệ ệ ồ ạ

th ườ ng l n h n kích th ớ ơ ướ c c a  ủ

th ườ ng l n h n kích th ớ ơ ướ c c a  ủ

m t m ng r t nhi u ộ ả ấ ề

m t m ng r t nhi u ộ ả ấ ề

Trang 12

8.1.5. T  ch c c a t p ổ ứ ủ ệ

8.1.5. T  ch c c a t p ổ ứ ủ ệ

S  lố ượng ph n t  trong t p không b  gi i h n ầ ử ệ ị ớ ạ

S  lố ượng ph n t  trong t p không b  gi i h n ầ ử ệ ị ớ ạ

 M i t p đ u ch a P M i t p đ u ch a P ỗ ệ ỗ ệ ề ề ứ ứ h n t  cu i cùng h n t  cu i cùng ầ ầ ử ử ố ố  đ  đ ượ ượ c g i là  c g i là  ọ ọ

ph n t   ầ ử

ph n t   ầ ử kí hi u k t thúc t p ( kí hi u k t thúc t p ( ệ ệ ế ế ệ ệ End Of File indicator 

– EOF). 

H  đi u hành s  t  đ ng giúp ta tìm ra đệ ề ẽ ự ộ ược v  ị

H  đi u hành s  t  đ ng giúp ta tìm ra đệ ề ẽ ự ộ ược v  ị

trí l u tr  ư ữ

trí l u tr  ư ữ ph n t  đ u tiên ph n t  đ u tiên ầ ầ ử ầ ử ầ  c a t p trên đĩa. c a t p trên đĩa.ủ ệủ ệ

Trang 13

8.1.6. Con tr  t p  ỏ ệ

8.1.6. Con tr  t p  ỏ ệ

Đ  truy c p vào m t ph n t  c a t p ể ậ ộ ầ ử ủ ệ

Đ  truy c p vào m t ph n t  c a t p ể ậ ộ ầ ử ủ ệ  S   S  ửử

 Sau m i thao tác đ c ghi trên t p, con tr  t p s  t   Sau m i thao tác đ c ghi trên t p, con tr  t p s  t   ỗ ỗ ọ ọ ệ ệ ỏ ệ ỏ ệ ẽ ự ẽ ự

đ ng d ch chuy n v  phía cu i t p. Kho ng cách  ộ ị ể ề ố ệ ả

đ ng d ch chuy n v  phía cu i t p. Kho ng cách  ộ ị ể ề ố ệ ả

d ch chuy n (tính theo byte) s  b ng s  byte đã đ ị ể ẽ ằ ố ượ c 

d ch chuy n (tính theo byte) s  b ng s  byte đã đ ị ể ẽ ằ ố ượ c 

đ c t  t p ho c ghi lên t p ọ ừ ệ ặ ệ

đ c t  t p ho c ghi lên t p ọ ừ ệ ặ ệ

Trang 15

8.2 Các thao tác với tệp

Các thao tác v i t p ph i tuân th  theo  ớ ệ ả ủ

Các thao tác v i t p ph i tuân th  theo  ớ ệ ả ủ

Trang 19

 Nếu mở thành công  Trả về một con trỏ tệp

tương ứng với tệp đã được mở

 Nếu không  Trả về con trỏ NULL

Trang 21

8.2.2 Mở tệp (tiếp)

Trang 25

8.2.3 Truy nhập tệp văn bản

Đọc dữ liệu từ tệp

Ghi dữ liệu lên tệp

Một số thao tác khác

Lưu ý : Để sử dụng các hàm trên, cần khai báo tệp tiêu đề stdio.h

Trang 27

int fflush(FILE* con_tro_tep);

 Hàm fflush() ghi toàn b  d  li u ch a trong vùng  toàn b  d  li u ch a trong vùng  ộ ữ ệ ộ ữ ệ ứ ứ

đ m c a t p (n m   b  nh  trong) t ệ ủ ệ ằ ở ộ ớ ươ ng  ng v i  ứ ớ

đ m c a t p (n m   b  nh  trong) t ệ ủ ệ ằ ở ộ ớ ươ ng  ng v i  ứ ớ

con_tro_tep ra vùng nh  c a t p trên b  nh  ngoài  ra vùng nh  c a t p trên b  nh  ngoài ớ ủ ệ ớ ủ ệ ộ ộ ớ ớ

Trang 28

a Đọc dữ liệu từ tệp văn bản (tiếp)

Hàm fgets():

char* fgets(char* xau_ki_tu, int n,

FILE* con_tro_tep);

nó gặp kí tự xuống dòng

tự kết thúc xâu (‘\0’, kí tự NULL) vào cuối xâu_kí_tự.

Nếu đọc thành công  Trả về xâu kí tự trỏ bởi xau_ki_tu

Trang 29

Hàm getc() :

 Cú pháp:

int getc(FILE* con_tro_tep);

 Đ c t  t p m t kí t  (m t byte d  li u), sau đó  Đ c t  t p m t kí t  (m t byte d  li u), sau đó  ọ ừ ệ ọ ừ ệ ộ ộ ự ự ộ ộ ữ ệ ữ ệ

chuy n đ i kí t  đó sang d ng s  nguyên  ể ổ ự ạ ố

chuy n đ i kí t  đó sang d ng s  nguyên  ể ổ ự ạ ố int (b ng   (b ng  ằ ằ

cách thêm byte cao 0x00) r i l y giá tr  s  nguyên thu  ồ ấ ị ố

cách thêm byte cao 0x00) r i l y giá tr  s  nguyên thu  ồ ấ ị ố

đ ượ c làm giá tr  tr  v  c a hàm ị ả ề ủ

đ ượ c làm giá tr  tr  v  c a hàm ị ả ề ủ

Trang 30

b Ghi dữ liệu lên tệp văn bản

Trang 31

int soTK; // so tai khoan

char tenChuTK[30]; // ten chu tai khoan

double soDuTK; // so tien co trong TK

printf("Nhap vao so, ten va so du TK.\n");

printf("Nhap so TK = 0 de ket thuc.\n");

Trang 32

printf("\nDa ghi vao tep thanh cong!");

} //ket thuc else

getch();

Trang 33

33

Trang 34

Hàm fprintf có thể ghi cả xâu chứa dấu cách vào tệp

Ví dụ: Sửa lại ví dụ trên nếu tenChuTK chứa cả dấu cách

Trang 35

35

Trang 36

b Ghi dữ liệu lên tệp văn bản (tiếp)

Hàm fputs() :

 Cú pháp:

int fputs(char* xau_ki_tu,

FILE* con_tro_tep);

 Hàm fputs() sẽ ghi nội dung của xau_ki_tu lên

tệp tương ứng với con_tro_tep, tuy nhiên nó khác với hàm puts() ở chỗ nó không tự động ghi thêm kí

tự xuống dòng lên tệp.

 Giá trị trả về:

Nếu thành công  Trả về kí tự cuối cùng ghi được lên tệp Ngược lại  Trả về giá trị EOF.

Trang 37

b Ghi dữ liệu lên tệp văn bản (tiếp)

Hàm putc()

 Cú pháp:

int putc(int ch, FILE* con_tro_tep);

 Hàm putc() ghi n i dung c a kí t  ch a trong bi n   ghi n i dung c a kí t  ch a trong bi n  ộ ộ ủ ủ ự ự ứ ứ ế ế int ch (kí t    ch (kí t   ự ự

đ ượ c ch a trong byte th p c a bi n ch) lên t p t ứ ấ ủ ế ệ ươ ng  ng v i  ứ ớ

đ ượ c ch a trong byte th p c a bi n ch) lên t p t ứ ấ ủ ế ệ ươ ng  ng v i  ứ ớ

con_tro_tep.

 Giá tr  tr  v : Giá tr  tr  v : ị ả ề ị ả ề

N u thành công  ế   Tr  v  s  nguyên (ki u   Tr  v  s  nguyên (ki u  ả ề ố ả ề ố ể ể int) là s  th  t  trong  ) là s  th  t  trong  ố ứ ự ố ứ ự

Trang 38

c Các thao tác khác

Hàm feof()

 Cú pháp: int feof(FILE* con_tro_tep);

 Ki m tra xem đã duy t đ n v  trí cu i t p hay ch a  Ki m tra xem đã duy t đ n v  trí cu i t p hay ch a  ể ể ệ ế ệ ế ị ị ố ệ ố ệ ư ư

b ng cách ki m tra xem trong kh i d  li u đ ằ ể ố ữ ệ ượ c đ c  ọ

b ng cách ki m tra xem trong kh i d  li u đ ằ ể ố ữ ệ ượ c đ c  ọ

vào   l n th c hi n g n nh t có ph n t  EOF không ở ầ ự ệ ầ ấ ầ ử

vào   l n th c hi n g n nh t có ph n t  EOF không ở ầ ự ệ ầ ấ ầ ử

Trang 39

 Dùng đ  d ch chuy n con tr  t p t   Dùng đ  d ch chuy n con tr  t p t   ể ị ể ị ể ể ỏ ệ ừ ỏ ệ ừ vi_tri_ban_dau 

đi m t kho ng cách có đ  dài n bytes.  ộ ả ộ

đi m t kho ng cách có đ  dài n bytes.  ộ ả ộ

Trang 40

Giá trị của biến n:

Đối với tệp văn bản, khi mở tệp có thể có sự tự động chuyển đổi

kí tự (ví dụ chuyển đổi cặp kí tự ‘\r’‘\n’ thành kí tự ‘\n’)

Trang 41

c Các thao tác khác (tiếp)

Hàm rewind() :

Cú pháp:

void rewind(FILE* con_tro_tep);

 Dùng để đưa con trỏ tệp về đầu tệp. 

Trang 43

if ((fpout = fopen(sfout, "w")) == NULL){

printf(stderr, "Khong the mo tap tin %s\n",

sfout);

getch(); exit(1);

}

Trang 46

8.2.4 Truy nhập tệp nhị phân

Đọc dữ liệu trên tệp

Ghi dữ liệu trên tệp

Dịch chuyển con trỏ tệp

Trang 47

thước = so_muc*so_byte bytes, sau đó ghi kh i  bytes, sau đó ghi kh i ốố

d  li u đó lên vùng nh  có đ a ch  là ữ ệ ớ ị ỉ

d  li u đó lên vùng nh  có đ a ch  là ữ ệ ớ ị ỉ

dia_chi_bien

K t qu  tr  v :ế ả ả ề

K t qu  tr  v :ế ả ả ề

 N u thành công  N u thành công  ế ế   Tr  v  m t giá tr  nguyên là s    Tr  v  m t giá tr  nguyên là s   ả ề ộ ả ề ộ ị ị ố ố

m c (không ph i s  bytes) đ c đ ụ ả ố ọ ượ ừ ệ c t  t p.

m c (không ph i s  bytes) đ c đ ụ ả ố ọ ượ ừ ệ c t  t p.

 Ng Ng ượ ạ ượ ạ c l i  c l i    Tr  v  giá tr  0  Tr  v  giá tr  0 ả ề ả ề ị ị

Trang 48

b Ghi dữ liệu trên tệp nhị phân

Cú pháp:

int fwrite(void *dia_chi_bien, int so_byte,

int so_muc, FILE* <con tro tep>);

Hàm fwrite() s  đ c t  b  nh  m t kh i d   s  đ c t  b  nh  m t kh i d  ẽ ọ ừ ộẽ ọ ừ ộ ớ ộớ ộ ố ữố ữ

li u có đ a ch  b t đ u là ệ ị ỉ ắ ầ

kích thước là 

nó ghi kh i d  li u này lên t p.ố ữ ệ ệ

nó ghi kh i d  li u này lên t p.ố ữ ệ ệ

K t qu  tr  v :ế ả ả ề

K t qu  tr  v :ế ả ả ề

N u thành công  ế

N u thành công  ế   Tr  v  m t giá tr  nguyên là s    Tr  v  m t giá tr  nguyên là s   ả ề ộ ả ề ộ ị ị ố ố

m c (không ph i s  bytes) đã ghi lên t p ụ ả ố ệ

m c (không ph i s  bytes) đã ghi lên t p ụ ả ố ệ

Ng ượ ạ c l i 

Ng ượ ạ c l i    Tr  v  giá tr  0   Tr  v  giá tr  0  ả ề ả ề ị ị

Trang 49

c Dịch chuyển con trỏ tệp nhị phân

Tương tự như tệp văn bản, ta có thể dùng các

hàm fseek()rewind() để dịch chuyển con

trỏ tệp trên tệp nhị phân

Hàm fseek() khi dùng với tệp nhị phân thì

không phải lưu ý như khi dùng với tệp văn bản

năng đ i ng u nhau ố ẫ

năng đ i ng u nhau ố ẫ

Trang 51

8.2.5 Đóng tệp

Đóng tệp là đảm bảo những thay đổi dữ

liệu được lưu lại trên tệp.

 N u thành công N u thành công ếế  Tr  v  giá tr  0 Tr  v  giá tr  0ả ềả ề ịị

 NgNgượ ạượ ạc l i c l i  Tr  v  giá tr   Tr  v  giá tr  ả ềả ề ịị EOF.

Trang 52

FILE* fptr1, fptr2; //Khai bao bien con tro tep

int i; float f, a[100];

char file_name_2[20];//Xau ki tu chua ten tep thu 2

printf("\n Khong mo duoc file c:\\float.dat");

printf("\n An phim bat ki de ket thuc!");

Trang 53

printf("\n Khong mo duoc file c:\\float.dat");

printf("\n An phim bat ki de ket thuc!");

exit(1);

}

Trang 54

Ví d  t ng h p (ti p) ụ ổ ợ ế

Ví d  t ng h p (ti p) ụ ổ ợ ế

// Mo tep thu 2 co ten nhap tu ban phim

// Copy du lieu tu tep c:\float.dat sang tep nay

printf("\n Nhap vao ten tep thu 2: ");

Trang 55

/* Doc và hien thi so thuc trong tep c:\float.dat

có so thu tu nhap tu ban phim */

printf("\n Cho biet thu tu cua so thuc trong

c:\\float.dat: “);

scanf("%d",&i);

Trang 57

Nhap vao ten tep thu 2: c:\f_copy.dat

So thuc dau tien tren c:\float.dat la 1.000000

Cho biet thu tu cua so thuc trong tep c:\float.dat: 10

So thuc thu 10 trong c:\float.dat la 8.200000

Trang 58

 Sau đó ghi ra m t file văn b n có đ a ch  là "float.dat" theo  Sau đó ghi ra m t file văn b n có đ a ch  là "float.dat" theo  ộ ộ ả ả ị ị ỉ ỉ

 Đ c l i t p văn b n đó và l u các s  th c đ c đ Đ c l i t p văn b n đó và l u các s  th c đ c đ ọ ạ ệ ọ ạ ệ ả ả ư ư ố ự ố ự ọ ọ ượ ượ c vào  c vào 

 S p x p các s  th c trong m ng theo th  t  tăng d n và  S p x p các s  th c trong m ng theo th  t  tăng d n và  ắ ắ ế ế ố ự ố ự ả ả ứ ự ứ ự ầ ầ

Trang 59

Vi t ch ế ươ ng trình sao chép n i dung t p  ộ ệ

Vi t ch ế ươ ng trình sao chép n i dung t p  ộ ệ

mã ngu n ch ồ ươ ng trình C có tên là 

mã ngu n ch ồ ươ ng trình C có tên là 

file_1.C sang t p có tên là file_2.C ệ

file_1.C sang t p có tên là file_2.C ệ

Trang 60

Bài t p (ti p) ậ ế

Bài 3: Vi t ch Vi t chếế ươương trình copy file:ng trình copy file:

 Nh p vào t  bàn phím 2 xâu kí t  là đ Nh p vào t  bàn phím 2 xâu kí t  là đ ậ ậ ừ ừ ự ự ườ ườ ng d n c a  ng d n c a  ẫ ẫ ủ ủ

file ngu n và file đích ồ

file ngu n và file đích ồ

 Copy n i dung c a file ngu n sang file đích Copy n i dung c a file ngu n sang file đích ộ ộ ủ ủ ồ ồ

Bài 4: Vi t ch Vi t chếế ươương trình ghép n i n i dung 2 ng trình ghép n i n i dung 2 ố ộố ộ

Ngày đăng: 29/05/2020, 15:27

TỪ KHÓA LIÊN QUAN

w