Microsoft PowerPoint IP 09 File in C XửXử lýlý tậptập tintin GV GV NguyễnNguyễn Minh Minh HuyHuy XửXử lýlý tậptập tintin 1Nhập môn lập trình GV Nguyễn Minh Huy NộiNội dungdung �� ThiếtThiết bịbị vàvà[.]
Xử lý tập tin GV Nguyễn Minh Huy Nhập môn lập trình - GV Nguyễn Minh Huy Nội dung Thiết bị stream File stream Các thao tác tập tin Nhập mơn lập trình - GV Nguyễn Minh Huy Nội dung Thiết bị stream File stream Các thao tác tập tin Nhập mơn lập trình - GV Nguyễn Minh Huy Thiết bị stream Khái niệm thiết bị: bị: Dữ liệu Chương trình Kết quả Chương trình lấy liệu từ đâu đâu? ? Chương trình xuất kết đâu đâu? ? Thiết bị (device) Phân loại thiết bị: bị: Thiết bị nhập nhập:: bàn phím phím,, chuột, chuột, tập tin, B Thiết bị xuất xuất:: hình hình,, máy in, tập tin, B Tập tin thiết bị vừa nhập vừa xuất xuất Nhập mơn lập trình - GV Nguyễn Minh Huy Thiết bị stream Khái niệm stream: Chương trình đọc/ đọc/ghi liệu từ thiết bị nào? ? Thơng qua “dịng chảy chảy”” liệu liệu Stream Phân loại stream: Stream nhập: nhập: ““dịng dịng chảy chảy”” vào chương trình từ thiết bị nhập nhập Stream xuất: xuất: ““dòng dòng chảy chảy”” khỏi chương trình từ thiết bị xuất xuất Nhập mơn lập trình - GV Nguyễn Minh Huy Thiết bị stream Khái niệm stream: Các stream định nghĩa sẵn C: Stream Ý nghĩa Thiết bị kết nối stdin Stream nhập chuẩn Bàn phím stdout Stream xuất chuẩn Màn hình stderr Stream lỗi chuẩn Màn hình stdprn Stream in chuẩn Máy in Lệnh nhập xuất tổng quát quát:: fscanf(, “”, &< &, B B)); fprintf((, “”, < , B B)); fprintf( stdout fprintf( stdout,, “Hello World” ); fprintf(( stdprn fprintf stdprn,, “Hello World” ); Nhập môn lập trình - GV Nguyễn Minh Huy // Xuất hình hình // Xuất máy in Nội dung Thiết bị stream File stream Các thao tác tập tin Nhập mơn lập trình - GV Nguyễn Minh Huy File stream Nhập xuất tập tin: Ưu điểm điểm:: Chứa nhiều liệu liệu Không cần thông qua người dùng dùng Lưu trữ lâu dài dài Khuyết điểm điểm:: Tốc độ xử lý chậm chậm Nhập mơn lập trình - GV Nguyễn Minh Huy File stream Nhập xuất tập tin C: Dùng file stream “Dòng chảy chảy”” kết nối chương trình tập tin Khai báo báo:: FILE *< * FILE *f1; *f1; FILE *f2; *f2; Các bước xử lý tập tin: Bước 1: mở tập tin Bước 2: thao tác tập tin Bước 3: đóng tập tin Nhập mơn lập trình - GV Nguyễn Minh Huy File stream Lệnh mở tập tin: Thiết lập file stream đến tập tin Cú pháp pháp:: fopen fopen((“< “”, “< “” >”)); Trả về: về: file stream ((thành thành công công), ), NULL ((thất thất bại) bại) Bảng chế độ mở tập tin: Chế độ mở Ý nghĩa r Read-only, mở để đọc liệu (kiểu text) Trả NULL khơng tìm thấy tập tin w Write-only, mở để ghi liệu (kiểu text) Tập tin tạo chưa có, ngược lại ghi đè a Append-only, mở để ghi thêm liệu (kiểu text) Tập tin tạo chưa có [Chế độ mở]+ Kết hợp đọc, ghi lúc [Chế độ mở]b Đọc, ghi kiểu nhị phân (binary) Nhập mơn lập trình - GV Nguyễn Minh Huy 10 Nội dung Thiết bị stream File stream Các thao tác tập tin Nhập mơn lập trình - GV Nguyễn Minh Huy 15 Các thao tác tập tin Các thao tác bản: bản: Đọc liệu liệu:: theo định dạng dạng Cú pháp pháp:: fscanf((, “”, &< &, B B)); Trả về: về: số biến đọc (thành công công), ), EOF ((thất thất bại) bại) int a, b; b; FILE *f = fopen(“C: fopen(“C:\\\BaiTap.txt”, “r “r”); if ( f == NULL ) printf(“ printf (“Khong Khong mo duoc tap tin! tin!\\n”); else { fscanf(( f, “%d %d”, &a, &b ); fscanf fclose(( f ); fclose } Nhập mơn lập trình - GV Nguyễn Minh Huy 16 Các thao tác tập tin Các thao tác bản: bản: Đọc ký tự: tự: Cú pháp pháp:: fgetc fgetc(() stream>); Trả về: về: ký tự (thành công công), ), EOF ((thất thất bại) bại) Đọc chuỗi chuỗi:: Cú pháp pháp:: fgets fgets((, >, , ) stream>); Ý nghĩa: nghĩa: đọc chuỗi đến gặp ký tự \n đủ tự> Trả về: về: độ dài chuỗi (thành công công), ), EOF ((thất thất bại) bại) char s[100] s[100];; FILE *f = fopen(“C: fopen(“C:\\\BaiTap.txt”, “r “r”); if ( f != NULL ) { fgets(( s fgets s,, 99, f ); fclose(( f ); fclose } Nhập mơn lập trình - GV Nguyễn Minh Huy 17 Các thao tác tập tin Các thao tác bản: bản: Ghi liệu liệu:: theo định dạng dạng Cú pháp pháp:: fprintf((, “”, < , B B)); Trả về: về: số byte ghi (thành công công), ), EOF ((thất thất bại) bại) int a = 12; float b = 4.165; char c = ‘A’; FILE *f = fopen(“C: fopen(“C:\\\BaiTap.txt”, “w “w”); if ( f == NULL ) printf(“ printf (“Khong Khong tao duoc tap tin! tin!\\n”); else { fprintf(( f, ““Gia fprintf Gia tri = %d %f %c”, a, b, c ); fclose(( f ); fclose } Nhập mơn lập trình - GV Nguyễn Minh Huy 18 Các thao tác tập tin Các thao tác bản: bản: Đọc liệu liệu:: theo khối byte (binary) Cú pháp pháp:: fread((, >, < >,< , >, stream>)); Trả về: về: số khối thật đọc được Kết thúc tập tin số khối thật < số khối đọc đọc int a[10]; a[10]; char s[100] s[100];; FILE *f = fopen(“C: fopen(“C:\\\BaiTap.txt”, “rb “rb”); ”); if ( f != NULL ) { fread(( a fread a,, sizeof( sizeof(int), int), 10, f ); fread(( s fread s,, sizeof(char), sizeof(char), 100, f ); fclose(( f ); fclose } Nhập môn lập trình - GV Nguyễn Minh Huy // Đọc 10 số nguyên nguyên // Đọc 100 ký tự tự 19 Các thao tác tập tin Các thao tác bản: bản: Ghi liệu liệu:: theo khối byte (binary) Cú pháp pháp:: fwrite((, >, < >,< , khối>, stream>)); Trả về: về: số khối thật ghi được int a[ ] = { 1, 2, 3, 4, }; char s[ ] = “Hello World”; FILE *f = fopen(“C: fopen(“C:\\\BaiTap.txt”, “wb “wb”); ”); if ( f != NULL ) { fwrite(( a fwrite a,, sizeof( sizeof(int), int), 3, f ); // Ghi số nguyên nguyên fwrite(( s fwrite s,, sizeof(char), sizeof(char), strlen(s), strlen(s), f ); // Ghi chuỗi s fclose(( f ); fclose } Nhập mơn lập trình - GV Nguyễn Minh Huy 20