LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới...

28
LẬP TRÌNH CƠ BẢN Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT KIỂU TẬP TIN (FILE) 1

Transcript of LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới...

Page 1: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

LẬP TRÌNH CƠ BẢN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

KIỂU TẬP TIN (FILE)

LẬP TRÌNH CƠ BẢN

1

Page 2: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Giới thiệu

� Biến và con trỏ tập tin

� Các thao tác trên tập tin

� Truy cập tập tin văn bản

NỘI DUNG

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

� Truy cập tập tin văn bản

� Truy cập tập tin nhị phân

Page 3: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Kiểu tập tin: Dữ liệu lưu trữ thành một filetrên hệ thống

� Các kiểu tập tin: 3 kiểu� Tập tin văn bản (Text File)

GIỚI THIỆU

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

� Tập tin định kiểu (Typed File)

� Tập tin không định kiểu (Untyped File)

Page 4: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Biến tập tin: là một biến thuộc kiểu dữ liệutập tin dùng để đại diện cho một tập tin.

� Con trỏ tập tin:� Khi một tập tin được mở ra để làm việc, tại mỗi thờiđiểm, sẽ có một vị trí của tập tin mà tại đó việc

BIẾN VÀ CON TRỎ TẬP TIN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

điểm, sẽ có một vị trí của tập tin mà tại đó việcđọc/ghi thông tin sẽ xảy ra.

� Người ta hình dung có một con trỏ đang chỉ đến vị tríđó và đặt tên nó là con trỏ tập tin.

� Sau khi đọc/ghi xong dữ liệu, con trỏ sẽ chuyển dịchthêm một phần tử về phía cuối tập tin. Sau phần tửdữ liệu cuối cùng của tập tin là dấu kết thúc tập tinEOF (End Of File).

Page 5: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

CÁC THAO TÁC TRÊN TẬP TIN

xử lý dữ

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

Khai báo biến tập tin1 Mở tập tin

bằng hàm fopen()2

xử lý dữ liệu của tập tin bằng các hàm đọc/ghi dữ

liệu

3Đóng tập tin bằng hàm

fclose()4

Page 6: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Khai báo biến tập tin

� Cú pháp:FILE <Danh sách các biến con trỏ>

� Ví dụ:

CÁC THAO TÁC TRÊN TẬP TIN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

Ví dụ:FILE *f1,*f2;

Page 7: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Mở tập tin

� Cú pháp:FILE *fopen(char *Path, const char *Mode)� Path: chuỗi chỉ đường dẫn đến tập tin trên đĩa.

CÁC THAO TÁC TRÊN TẬP TIN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

� Type: chuỗi xác định cách thức mà tập tin sẽ mở. Các giá trị có thể của Mode:

Page 8: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Mở tập tin

CÁC THAO TÁC TRÊN TẬP TIN

Mode Ý nghĩa

r Mở tập tin văn bản để đọc

w Tạo ra tập tin văn bản mới để ghi

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

w Tạo ra tập tin văn bản mới để ghi

a Nối vào tập tin văn bản

rb Mở tập tin nhị phân để đọc

wb Tạo ra tập tin nhị phân để ghi

ab Nối vào tập tin nhị phân

Page 9: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Mở tập tin

CÁC THAO TÁC TRÊN TẬP TIN

Mode Ý nghĩa

r+ Mở một tập tin văn bản để đọc/ghi

w+ Tạo ra tập tin văn bản để đọc ghi

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

w+ Tạo ra tập tin văn bản để đọc ghi

a+ Nối vào hay tạo mới tập tin văn bản để đọc/ghi

r+b Mở ra tập tin nhị phân để đọc/ghi

w+b Tạo ra tập tin nhị phân để đọc/ghi

a+b Nối vào hay tạo mới tập tin nhị phân

Page 10: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Mở tập tin

� Ví dụ: Mở tập tin để ghiFILE *f;

f = fopen(“TEST.txt”, “w”);

if (f!=NULL)

CÁC THAO TÁC TRÊN TẬP TIN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

if (f!=NULL)

{

/* Các câu lệnh để thao tác với tập tin*/

/* Đóng tập tin*/

}

Page 11: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Đóng tập tin

� Cú pháp:int fclose(FILE *f):

=0 báo rằng việc đóng tập tin thành công

=EOF nếu có xuất hiện lỗi.

CÁC THAO TÁC TRÊN TẬP TIN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

=EOF nếu có xuất hiện lỗi.

int fcloseall():

=tổng số các tập tin được đóng lại.

= EOF Nếu không thành công.

Page 12: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Kiểm tra đến cuối tập tin hay chưa?� Cú pháp: int feof(FILE *f)

= EOF nếu cuối tập tin được chạm tới,

=0 trong trường hợp ngược lại.

� Di chuy�n con tr t�p tin v� đ�u t�p tin

CÁC THAO TÁC TRÊN TẬP TIN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

� Di chuy�n con tr t�p tin v� đ�u t�p tin � Cú pháp: void rewind(FILE *f)

Page 13: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Ghi dữ liệu lên tập tin văn bản:� int putc(int c, FILE *f): Ghi một ký tự lên mộttập tin văn bản đang được mở để làm việc.

� int fputs(const char *buffer, FILE *f) : ghi mộtchuỗi ký tự chứa trong vùng đệm lên tập tin

TRUY CẬP TẬP TIN VĂN BẢN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

chuỗi ký tự chứa trong vùng đệm lên tập tinvăn bản.

� fprintf(FILE *f, const char *format, varexpr):ghi dữ liệu có định dạng lên tập tin văn bản.

Page 14: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Đọc dữ liệu từ tập tin văn bản:� int getc(FILE *f): đọc dữ liệu từ tập tin văn bảnđang được mở để làm việc.

� char *fgets(char *buffer, int n, FILE *f): đọcmột chuỗi ký tự từ tập tin văn bản đang được

TRUY CẬP TẬP TIN VĂN BẢN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

một chuỗi ký tự từ tập tin văn bản đang đượcmở ra và liên kết với con trỏ f cho đến khi đọcđủ n ký tự hoặc gặp ký tự xuống dòng ‘\n’ haygặp ký tự kết thúc EOF.

� fscanf(FILE *f, const char *format, varlist): đọcdữ liệu từ tập tin văn bản vào danh sách cácbiến theo định dạng.

Page 15: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Ví dụ 1: Viết chương trình ghi chuỗi ký tự lên tập tin vănbản D:\\THIDU.txt

#include<stdio.h>

#include<conio.h>

int main()

{

FILE *f;

TRUY CẬP TẬP TIN VĂN BẢN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

FILE *f;

f=fopen("D:\\thidu.txt","w+");

if (f!=NULL)

{ fputs("BAI THUC HANH.\n",f);

fputs("Bai 1: Nhap cac so nguyen duong.",f);

fclose(f);

}

getch();

return 0;}

Page 16: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Ví dụ 2: Viết chương trình ghi chuỗi ký tự lên tập tin vănbản D:\\THIDU.txt#include<stdio.h>

#include<conio.h>

int main()

{ FILE *f1,*f2;

f1=fopen("D:\\THIDU.txt","rt");

TRUY CẬP TẬP TIN VĂN BẢN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

f1=fopen("D:\\THIDU.txt","rt");

f2=fopen("D:\\VIDU.txt","wt");

if (f1!=NULL && f2!=NULL)

{ int ch=fgetc(f1);

while (! feof(f1))

{ fputc(ch,f2);

ch=fgetc(f1);

}fcloseall();

}

getch(); return 0;}

Page 17: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Ghi dữ liệu lên tập tin nhị phân - Hàm fwrite() :size_t fwrite(const void *ptr,

size_t size, size_t n, FILE *f)

ptr: con trỏ chỉ đến vùng nhớ chứa thông tin cần ghi

TRUY CẬP TẬP TIN NHỊ PHÂN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

� ptr: con trỏ chỉ đến vùng nhớ chứa thông tin cần ghi lên tập tin.

� n: số phần tử sẽ ghi lên tập tin.

� size: kích thước của mỗi phần tử.

� f: con trỏ tập tin đã được mở.

� Giá trị trả về của hàm này là số phần tử được ghi lên tập tin. Giá trị này bằng n trừ khi xuất hiện lỗi.

Page 18: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Đọc dữ liệu từ tập tin nhị phân - Hàm fread() :size_t fread(const void *ptr, size_t

size, size_t n, FILE *f)

ptr: con trỏ chỉ đến vùng nhớ sẽ nhận dữ liệu từ tập tin.

TRUY CẬP TẬP TIN NHỊ PHÂN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

� ptr: con trỏ chỉ đến vùng nhớ sẽ nhận dữ liệu từ tập tin.

� n: số phần tử được đọc từ tập tin.

� size: kích thước của mỗi phần tử.

� f: con trỏ tập tin đã được mở.

� Giá trị trả về của hàm này là số phần tử đã đọc được từ tập tin. Giá trị này bằng n hay nhỏ hơn n nếu đã chạm đến cuối tập tin hoặc có lỗi xuất hiện..

Page 19: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Di chuyển con trỏ tập tin - Hàm fseek():int fseek(FILE *f, long offset, int whence)

� f: con trỏ tập tin đang thao tác.

� offset: số byte cần dịch chuyển con trỏ tập tin kể từ vị trí trước đó. Phần tử đầu tiên là vị trí 0.

TRUY CẬP TẬP TIN NHỊ PHÂN

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

trí trước đó. Phần tử đầu tiên là vị trí 0.

� whence: vị trí bắt đầu để tính offset:

� 0 ( SEEK_SET): Vị trí đầu tập tin

� 1 (SEEK_CUR): Vị trí hiện tại của con trỏ tập tin

� 2 (SEEK_END): Vị trí cuối tập tin

� Kết quả trả về của hàm là 0 nếu việc di chuyển thành công. Nếu không thành công, 1 giá trị khác 0 (đó là 1 mã lỗi) được trả về.

Page 20: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Bài 1. Thực hiện biên soạn và chạy thử nghiệm Ví dụ 1và 2 trong bài.

� Bài 2: Thực hiện biên soạn và chạy thử nghiệm chươngtrình sau:

#include <stdio.h>

#include <conio.h>

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

#include <conio.h>

int a[10];

void GhiFile(int N)

{ FILE *f=fopen("D:\\Data.dat","wt");

for(int i=0;i<N;i++)

{

fprintf(f," %d",i);

}

fclose(f);

}

Page 21: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

void DocDuLieuTuFile(int N)

{

FILE * f = fopen("D:\\Data.dat","rt");

for(int i=0;i<N;i++)

{ fscanf(f,"%d",&a[i]);

}

fclose(f);

}

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

}

main()

{ GhiFile(5);

DocDuLieuTuFile(5);

for(int i=0;i<5;i++)

{ printf(" %d",a[i]);

}

getch();

}

Page 22: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Bài 3: Thực hiện biên soạn và chạy thử nghiệm chươngtrình: Mỗi sinh viên cần quản lý ít nhất 2 thông tin: mãsinh viên và họ tên. Viết chương trình cho phép lựa chọncác chức năng: nhập danh sách sinh viên từ bàn phím rồighi lên tập tin SinhVien.dat, đọc dữ liệu từ tập tinSinhVien.dat rồi hiển thị danh sách lên màn hình, tìm

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

SinhVien.dat rồi hiển thị danh sách lên màn hình, tìmkiếm họ tên của một sinh viên nào đó dựa vào mã sinhviên nhập từ bàn phím.

Page 23: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

#include<stdio.h>

#include<conio.h>

#include<string.h>

typedef struct

{

char Ma[10];

char HoTen[40]; } SinhVien;

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

Page 24: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

void WriteFile(char *FileName)

{ FILE *f;

int n,i;

SinhVien sv;

f=fopen(FileName,"ab");

printf("Nhap bao nhieu sinh vien? ");scanf("%d",&n);

for(i=1;i<=n;i++)

{

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

{

printf("Sinh vien thu %i\n",i);

printf(" - MSSV: ");gets(sv.Ma);

printf(" - Ho ten: ");gets(sv.HoTen);

fwrite(&sv,sizeof(sv),1,f);

}

fclose(f);

getch();

}

Page 25: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

void ReadFile(char *FileName)

{

FILE *f;

SinhVien sv;

f=fopen(FileName,"rb");

printf(" MSSV | Ho va ten\n");

fread(&sv,sizeof(sv),1,f);

while (!feof(f))

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

while (!feof(f))

{

printf(" %s | %s\n",sv.Ma,sv.HoTen);

fread(&sv,sizeof(sv),1,f);

}

fclose(f);

printf("Bam phim bat ky de tiep tuc!!!");

getch();

}

Page 26: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

void Search(char *FileName)

{

char MSSV[10];

FILE *f;

int Found=0;

SinhVien sv;

printf("Ma so sinh vien can tim: ");gets(MSSV);

f=fopen(FileName,"rb");

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

f=fopen(FileName,"rb");

while (!feof(f) && Found==0)

{ fread(&sv,sizeof(sv),1,f);

if (strcmp(sv.Ma,MSSV)==0) Found=1;

}

fclose(f);

if (Found == 1)

printf("Tim thay SV co ma %s. Ho ten la: %s",sv.Ma,sv.HoTen); else

printf("Tim khong thay sinh vien co ma %s",MSSV);

getch(); }

Page 27: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

int main()

{ int c;

for (;;)

{

printf("1. Nhap DSSV\n");

printf("2. In DSSV\n");

printf("3. Tim kiem\n");

printf("4. Thoat\n");

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT

printf("4. Thoat\n");

printf("Ban chon 1, 2, 3, 4: "); scanf("%d",&c);

if(c==1)

WriteFile("d:\\SinhVien.Dat");

else if (c==2)

ReadFile("d:\\SinhVien.Dat");

else if (c==3)

Search("d:\\SinhVien.Dat");

else break;}

return 0; }

Page 28: LẬP TRÌNH CƠ BẢN KIỂU TẬP TIN (FILE) · 2013-06-12 · KIỂU TẬP TIN (FILE) 1. Giới thiệu Biến và con trỏ tập tin ... w Tạo ra tập tin văn bản mới

� Bài 4: Viết chương trình giải và biện luận Phương trìnhbậc hai và ghi kết quả vào file.

Bài 5. Viết chương trình nhập vào một dãy n số thực a[0],a[1],..., a[n-1], sắp xếp dãy số theo thứ tự từ lớn đến nhỏ.Ghi dãy số sau khi sắp xếp vào file.

BÀI TẬP THỰC HÀNH

Biên soạn: Chu Thị Hường – Bộ môn HTTT – Khoa CNTT