Tải bản đầy đủ (.ppt) (37 trang)

Thuyết trình đề tài Tập tin docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.51 MB, 37 trang )

Bài tập
Một số hàm xử lý khác
Các thao tác xử lý căn bản
Phân loại tập tin
Giới thiệu về tập tin
Tập tin văn bản ASCII
Tập tin nhị phân
Khai báo biến tập tin bằng từ khóa FILE được định nghĩa
trong <stdio.h> với cấu trúc:
Ví dụ:
FILE *fp; // Khai báo 1 biến con trỏ file
FILE *fp1,*fp2 // Khai báo nhiều biến con trỏ file
FILE Danh sách biến con trỏ

Hàm dùng để mở một File, nếu thành công trả về con
trỏ kiểu File ứng với File vừa mở, ngược lại trả về
NULL.

Trong đó:

đường dẫn: chỉ định tên đường dẫn để truy xuất tập tin. Nếu trong
có đường dẫn thì sẽ truy xuất trong thư mục hiện hành.
Ví dụ:
fopen (“test.txt”,…) // Không đường dẫn
fopen (“D:\\test\\test.txt”,…) // Có đường dẫn


kiểu là tổ hợp các ký tự mô tả các tùy chọn sau:
fopen (char *đường dẫn, char *kiểu)
“w” Mở tập tin chỉ để ghi vào đĩa. (nếu đã có thì nội dụng
tập tin cũ sẽ bị xóa)
“w+” Mở một tập tin mới để đọc, ghi . (nếu đã có thì nội
dụng tập tin cũ sẽ bị xóa).
“r” Mở tập tin đã có chỉ để đọc từ đĩa vào bộ nhớ.
“r+” Mở tập tin đã có trên đĩa để đọc hoặc ghi.
“a” Mở tập tin để thêm vào (append) cuối tập tin (không
đọc được)
“a+” Mở tập tin để đọc, ghi. Nếu tập tin đã có thì nối
thêm. Nếu chưa thì tạo tập tin mới.
“b” Mở tập tin kiểu nhị phân (binary)
“t” Mở tập tin kiểu văn bản (text)
Ta có thể kết hợp các tùy chọn. Ví dụ như “rt”,
“wb” hay “a+t”…
Ví dụ:
FILE *fp;
fp = fopen (“SINHVIEN.TXT”, “rt”);
if (fp==NULL)
{
printf(“Khong mo duoc tap tin.”);
perror (“Ly do\n”);
}
else
{
printf(“Da mo duoc tap tin.”);
}

Để đóng tất cả các File đang mở ta còn có thể dùng hàm:

int fclose (biến_tập_tin)
int fcloseall ()
Nếu thành công 2 hàm này cho giá trị khác 0, ngược
lại trả về EOF.
FILE *fp;
fp = fopen (“sinhvien.txt”,”wt”);
if (fp!=NULL)
fclose (fp);

Ghi ký tự: (Làm việc với Text & Binary.)
int putc(int ch, FILE *fp);
int fputc(int ch, FILE *fp);
2 hàm này sẽ ghi vào file một ký tự có mã = ch%256. Nếu
thành công trả về mã ký tự được ghi, ngược lại trả về
EOF.

Đọc ký tự từ File: (Làm việc với Text & Binary. )
int getc(FILE *fp);
int fgetc(FILE *fp);
Hàm đọc một ký tự từ File fp, nếu thành công hàm cho
mã của ký tự đọc được, ngược lại trả về EOF.
Ví dụ: char c = fgetc (fp);

Ghi chuỗi ký tự: (Làm việc với Text )

Đọc chuổi (dãy) ký tự từ File: (Làm việc với Text )
int fputs(const char *s, FILE *fp);
Hàm sẽ ghi chuỗi s lên File fp. nếu thành công trả về ký tự
cuối cùng được ghi vào File, ngược lại trả về EOF.
char *fgets(char *s, int n, FILE *fp);

Hàm sẽ đọc một dãy ký tự từ File fp vào vùng nhớ s, kết
thúc khi đủ n-1 ký tự hoặc gặp ký tự xuống dòng nếu thành
công hàm trả về địa chỉ vùng nhận kết quả, ngược lại trả về
NULL.

Ghi dữ liệu theo khuôn dạng: (Làm việc với Text )

Với control chứa địa chỉ của chuỗi điều khiển (giống như
trong hàm printf), là danh sách các đối mà giá trị của
chúng cần ghi vào File.

Ví dụ:
int fprintf(FILE *fp, const char *control, );
FILE *fp; int a=777
fp = fopen (“taptin.txt”, “wt”);
if (fp!=NULL)
fprintf(fp, “%d\n”,a );

Ví dụ về ghi dữ liệu:
void taotaptin() //tao tap tin de ghi(lay du lieu bo
nho de ghi len tap tin)
{
FILE *fp;
fp=fopen("TEXT.txt","wt");
if(fp!=NULL)
{
char s[]=“Nguyen Van A”; float dtb = 8.5;
//ghi du lieu len tap tin
fprintf(fp,“Sinh vien ”);
fputs (s,fp);

fprintf(fp, “\nDiem trung binh %.2f”,dtb);
}
else
printf(“Ko tao duoc tap tin\n” );
}

Đọc dữ liệu theo khuôn dạng: (Làm việc với Text )
Với control chứa địa chỉ của chuổi điều khiển (giống như trong
hàm scanf), là danh sách các đối chứa kết quả đọc được từ
File.

Ví dụ:
int fscanf(FILE *fp, const char *control, );
FILE *fp; int a;
fp = fopen (char *tentaptin, “wt”);
if (fp!=NULL && feof!=NULL)
fscanf(fp, “%d”,&a );

Ta có một file text (sinhvien.txt) chứa thông tin các
sinh viên, được định dạng như sau:

<MSSV> -<HoTen>(<Nam/Nu>)tab<NTNS>tab<DTB>

MSSV (chuỗi)

HoTen (chuỗi)

Nam/Nu (số nguyên)


NTNS (chuỗi)

DTB (số thực)

Ta cần viết một chương trình đọc file text trên, xuất
lại ra màn hình các thông tin ngoại trừ HoTen

0812345-Nguyen Van A(Nam) 29/12/1990 9.5

Ví dụ về đọc dữ liệu phức hợp:
struct sinhvien
{
char MSSV[9];
char HoTen [30];
char gioitinh[4];
char ntns[10];
float dtb;
};
void main()
{
FILE *fp;
sinhvien sv;
fp = fopen ("ds.txt","rt");
if (fp!=NULL)
{
fscanf(fp,"%[^-]-%[^(](%[^)])\t%[^\t]\t%f” ,
sv.MSSV,sv.HoTen,sv.gioitinh,sv.ntns,&sv.dtb);
fclose(fp);
}
printf("%s\n(%s)\n%s\n%.2f",sv.MSSV,sv.gioitinh,sv.ntns,sv.dtb);

}

Ghi một số nguyên : (Làm việc với Binary. )
Nếu thành công hàm trả về số nguyên được ghi, ngược lại trả
về EOF.

Đọc một số nguyên : (Làm việc với Binary. )

Hàm đọc một số nguyên(2 byte).
Nếu thành công trả về số nguyên đọc được, khi có lỗi hoặc cuối
File hàm trả về EOF.
int putw(int n, FILE *fp);
int getw(FILE *fp);
void main()
{
FILE *f;
int n;
f = fopen ("myfile.bin",“r+b");
if (f!=NULL)
{
n=getw(f);
if(n!=EOF)
printf("Da doc thanh cong!\n%d",n);
}
else
printf("Loi");
}
Ví dụ:

Ghi các mẫu tin lên File:


Với pt là con trỏ trỏ tới vùng nhớ chứa dữ liệu cần ghi, size
là kích thước của mẫu tin (byte), n làsố mẫu tin, fp là con trỏ
File.

Hàm sẽ ghi n mẫu tin kích thước size byte từ vùng nhớ pt lên
File fp.
Hàm trả về một giá trị = số mẫu tin thực sự được ghi.
int fwrite( void *pt, int size, int n, File *fp);

×