Bài giảng Nhập môn lập trình - Chương 9: Xử lý tập tin - Nguyễn Minh Huy
Xꢀ lý tꢁp tin
GV. Nguyꢀn Minh Huy
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
1
Nꢃi dung
ꢀ Thiꢄt bꢅ và stream.
ꢀ File stream.
ꢀ Các thao tác trên tꢁp tin.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
2
Nꢃi dung
ꢀ Thiꢂt bꢃ và stream.
ꢀ File stream.
ꢀ Các thao tác trên tꢁp tin.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
3
Thiꢄt bꢅ và stream
ꢀ Khái niꢆm thiꢄt bꢅ:
ꢀ Dꢇ liꢆu ꢁ Chương trình ꢁ Kꢄt quꢈ.
ꢀ Chương trình lꢉy dꢇ liꢆu tꢊ đâu?
ꢀ Chương trình xuꢉt kꢄt quꢈ ra đâu?
ꢂ Thiꢄt bꢅ (device).
ꢀ Phân loꢋi thiꢄt bꢅ:
ꢃ Thiꢄt bꢅ nhꢁp: bàn phím, con chuꢃt, tꢁp tin, ꢌ
ꢃ Thiꢄt bꢅ xuꢉt: màn hình, máy in, tꢁp tin, ꢌ
ꢂ Tꢁp tin là thiꢄt bꢅ vꢊa nhꢁp vꢊa xuꢉt.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
4
Thiꢄt bꢅ và stream
ꢀ Khái niꢆm stream:
ꢀ Chương trình đꢍc/ghi dꢇ liꢆu tꢊ thiꢄt bꢅ thꢄ nào?
ꢂ Thông qua nhꢇng “dòng chꢈy” dꢇ liꢆu.
ꢂ Stream.
ꢀ Phân loꢋi stream:
ꢃ Stream nhꢁp: “dòng chꢈy” vào chương trình tꢊ thiꢄt bꢅ nhꢁp.
ꢃ Stream xuꢉt: “dòng chꢈy” khꢎi chương trình tꢊ thiꢄt bꢅ xuꢉt.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
5
Thiꢄt bꢅ và stream
ꢀ Khái niꢆm stream:
ꢀ Các stream đꢅnh nghĩa sꢏn trong C:
Stream
stdin
Ý nghĩa
Stream nhꢁp chuꢐn.
Stream xuꢉt chuꢐn.
Stream lꢑi chuꢐn.
Stream in chuꢐn
Thiꢂt bꢃ kꢂt nꢄi
Bàn phím
stdout
stderr
stdprn
Màn hình
Màn hình
Máy in
ꢀ Lꢆnh nhꢁp xuꢉt tꢒng quát:
ꢃ fscanf(<Stream>, “<Đꢅnh dꢋng kiꢓu>”, &<Biꢄn 1>, ꢌ);
ꢃ fprintf(<Stream>, “<Đꢅnh dꢋng xuꢉt>”, <Biꢄn 1>, ꢌ);
fprintf( stdout, “Hello World” );
fprintf( stdprn, “Hello World” );
// Xuꢉt ra màn hình.
// Xuꢉt ra máy in.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
6
Nꢃi dung
ꢀ Thiꢄt bꢅ và stream.
ꢀ File stream.
ꢀ Các thao tác trên tꢁp tin.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
7
File stream
ꢀ Nhꢁp xuꢉt bꢔng tꢁp tin:
ꢀ Ưu điꢓm:
ꢃ Chꢕa đưꢖc nhiꢗu dꢇ liꢆu.
ꢃ Không cꢘn thông qua ngưꢙi dùng.
ꢃ Lưu trꢇ đưꢖc lâu dài.
ꢀ Khuyꢄt điꢓm:
ꢃ Tꢚc đꢃ xꢛ lý chꢁm.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
8
File stream
ꢀ Nhꢁp xuꢉt tꢁp tin trong C:
ꢀ Dùng file stream.
ꢃ “Dòng chꢈy” kꢄt nꢚi chương trình và tꢁp tin.
ꢃ Khai báo: FILE *<Tên stream>.
FILE *f1;
ꢀ Các bưꢜc xꢛ lý tꢁp tin:
ꢃ Bưꢜc 1: mꢝ tꢁp tin.
ꢃ Bưꢜc 2: thao tác trên tꢁp tin.
ꢃ Bưꢜc 3: đóng tꢁp tin.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
9
File stream
ꢀ Lꢆnh mꢝ tꢁp tin:
ꢀ Thiꢄt lꢁp mꢃt file stream đꢄn tꢁp tin.
ꢃ Cú pháp: fopen(“<Đưꢙng dꢞn tꢁp tin>”, “<Chꢄ đꢃ mꢝ>”);
ꢃ Trꢈ vꢗ: file stream (thành công), NULL (thꢉt bꢋi).
ꢃ Bꢈng các chꢄ đꢃ mꢝ tꢁp tin:
Chꢂ đꢅ mꢆ
Ý nghĩa
r
Readꢂonly, mꢝ đꢓ đꢍc dꢇ liꢆu (kiꢓu text).
Trꢈ vꢗ NULL nꢄu không tìm thꢉy tꢁp tin.
w
a
Writeꢂonly, mꢝ đꢓ ghi dꢇ liꢆu (kiꢓu text).
Tꢁp tin sꢟ đưꢖc tꢋo nꢄu chưa có, ngưꢖc lꢋi sꢟ ghi đè.
Appendꢂonly, mꢝ đꢓ ghi thêm dꢇ liꢆu (kiꢓu text).
Tꢁp tin sꢟ đưꢖc tꢋo nꢄu chưa có.
[Chꢄ đꢃ mꢝ]+
[Chꢄ đꢃ mꢝ]b
Kꢄt hꢖp đꢍc, ghi cùng lúc.
Đꢍc, ghi kiꢓu nhꢅ phân (binary).
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
10
File stream
ꢀ Lꢆnh đóng tꢁp tin:
ꢀ Hꢠy file stream đꢄn tꢁp tin.
ꢃ Cú pháp: fclose(<File stream>);
ꢃ Chꢡ đóng đưꢖc tꢁp tin đang mꢝ.
ꢃ Luôn đóng tꢁp tin sau khi kꢄt thúc công viꢆc.
FILE *f = fopen(“C:\\BaiTap.txt”, “r”);
if ( f == NULL )
{
printf(“Khong mo duoc tap tin!\n”);
fclose( f );
// Sai.
}
else
{
printf(“Da mo duoc tap tin!\n”);
fclose( f ); // Đúng.
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
11
File stream
ꢀ Vꢅ trí nhꢁp xuꢉt hiꢆn hành:
ꢀ Điꢓm kꢄt nꢚi cꢠa File stream vào tꢁp tin.
ꢀ Nhꢁp xuꢉt luôn bꢢt đꢘu tꢊ vꢅ trí hiꢆn hành.
ꢀ Vꢅ trí hiꢆn hành thay đꢒi sau mꢑi thao tác nhꢁp xuꢉt.
r
Đꢘu tꢁp tin.
Đꢘu tꢁp tin.
Cuꢚi tꢁp tin.
w
a
[Chꢄ đꢃ mꢝ]+
[Chꢄ đꢃ mꢝ]b
Tùy thuꢃc chꢄ đꢃ mꢝ.
Tùy thuꢃc chꢄ đꢃ mꢝ.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
12
File stream
ꢀ Lꢆnh thay đꢒi vꢅ trí hiꢆn hành:
ꢀ Thay đꢒi điꢓm kꢄt nꢚi File stream vào tꢁp tin.
ꢃ Cú pháp: fseek(<File stream>, <Đꢃ dꢙi>, <Vꢅ trí gꢚc>);
ꢃ <Vꢅ trí gꢚc>:
ꢃ SEEK_SET (đꢘu tꢁp tin).
ꢃ SEEK_CUR (vꢅ trí hiꢆn hành).
ꢃ SEEK_END (cuꢚi tꢁp tin).
ꢃ Chꢡ thay đꢒi vꢅ trí hiꢆn hành vꢜi tꢁp tin đang mꢝ.
FILE *f = fopen(“C:\\BaiTap.txt”, “r”);
if ( f != NULL )
{
fseek( f, 2, SEEK_CUR );
// Tiꢄn tꢜi 2 bytes.
fclose( f );
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
13
File stream
ꢀ Lꢆnh thông báo vꢅ trí hiꢆn hành:
ꢀ Thông báo vꢅ trí hiꢆn hành so vꢜi đꢘu tꢁp tin.
ꢃ Cú pháp: ftell(<File stream>);
ꢃ Chꢡ thông báo vꢅ trí hiꢆn hành vꢜi tꢁp tin đang mꢝ.
FILE *f = fopen(“C:\\BaiTap.txt”, “r”);
if ( f != NULL )
{
fseek( f, 0, SEEK_END );
long filesize = ftell( f );
// Lꢉy kích thưꢜc tꢁp tin.
fclose( f );
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
14
Nꢃi dung
ꢀ Thiꢄt bꢅ và stream.
ꢀ File stream.
ꢀ Các thao tác trên tꢁp tin.
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
15
Các thao tác trên tꢁp tin
ꢀ Các thao tác cơ bꢈn:
ꢀ Đꢍc dꢇ liꢆu: theo đꢅnh dꢋng.
ꢃ Cú pháp:
fscanf(<File stream>, “<Đꢅnh dꢋng kiꢓu>”, &<Biꢄn 1>, ꢌ);
ꢃ Trꢈ vꢗ: sꢚ biꢄn đꢍc đưꢖc (thành công), EOF (thꢉt bꢋi).
int a, b;
FILE *f = fopen(“C:\\BaiTap.txt”, “r”);
if ( f == NULL )
printf(“Khong mo duoc tap tin!\n”);
else
{
fscanf( f, “%d %d”, &a, &b );
fclose( f );
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
16
Các thao tác trên tꢁp tin
ꢀ Các thao tác cơ bꢈn:
ꢀ Đꢍc ký tꢣ:
ꢃ Cú pháp: fgetc(<File stream>);
ꢃ Trꢈ vꢗ: ký tꢣ (thành công), EOF (thꢉt bꢋi).
ꢀ Đꢍc chuꢑi:
ꢃ Cú pháp: fgets(<Biꢄn chuꢑi>, <Sꢚ ký tꢣ>, <File stream>);
ꢃ Ý nghĩa: đꢍc chuꢑi đꢄn khi gꢤp ký tꢣ \n hoꢤc đꢠ <Sꢚ ký tꢣ>.
ꢃ Trꢈ vꢗ: đꢃ dài chuꢑi (thành công), EOF (thꢉt bꢋi).
char s[100];
FILE *f = fopen(“C:\\BaiTap.txt”, “r”);
if ( f != NULL )
{
fgets( s, 99, f );
fclose( f );
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
17
Các thao tác trên tꢁp tin
ꢀ Các thao tác cơ bꢈn:
ꢀ Ghi dꢇ liꢆu: theo đꢅnh dꢋng.
ꢃ Cú pháp:
fprintf(<File stream>, “<Đꢅnh dꢋng kiꢓu>”, <Biꢄn 1>, ꢌ);
ꢃ Trꢈ vꢗ: sꢚ byte ghi đưꢖc (thành công), EOF (thꢉt bꢋi).
int a = 12;
float b = 4.165;
char c = ‘A’;
FILE *f = fopen(“C:\\BaiTap.txt”, “w”);
if ( f == NULL )
printf(“Khong tao duoc tap tin!\n”);
else
{
fprintf( f, “Gia tri = %d %f %c”, a, b, c );
fclose( f );
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
18
Các thao tác trên tꢁp tin
ꢀ Các thao tác cơ bꢈn:
ꢀ Đꢍc dꢇ liꢆu: theo khꢚi byte (binary).
ꢃ Cú pháp:
fread(<Vùng nhꢜ>, <Kích thưꢜc khꢚi> , <Sꢚ khꢚi đꢍc>, <File stream>);
ꢃ Trꢈ vꢗ: sꢚ khꢚi thꢁt sꢣ đꢍc đưꢖc.
ꢂ Kꢄt thúc tꢁp tin khi sꢚ khꢚi thꢁt sꢣ < sꢚ khꢚi đꢍc.
int a[10];
char s[100];
FILE *f = fopen(“C:\\BaiTap.txt”, “rb”);
if ( f != NULL )
{
fread( a, sizeof(int), 10, f );
fread( s, sizeof(char), 100, f );
fclose( f );
// Đꢍc 10 sꢚ nguyên.
// Đꢍc 100 ký tꢣ.
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
19
Các thao tác trên tꢁp tin
ꢀ Các thao tác cơ bꢈn:
ꢀ Ghi dꢇ liꢆu: theo khꢚi byte (binary).
ꢃ Cú pháp:
fwrite(<Vùng nhꢜ>, <Kích thưꢜc khꢚi> , <Sꢚ khꢚi>, <File stream>);
ꢃ Trꢈ vꢗ: sꢚ khꢚi thꢁt sꢣ ghi đưꢖc.
int a[ ] = { 1, 2, 3, 4, 5 };
char s[ ] = “Hello World”;
FILE *f = fopen(“C:\\BaiTap.txt”, “wb”);
if ( f != NULL )
{
fwrite( a, sizeof(int), 3, f );
// Ghi 3 sꢚ nguyên.
fwrite( s, sizeof(char), strlen(s), f ); // Ghi chuꢑi s.
fclose( f );
}
Nhꢁp môn lꢁp trình ꢂ GV. Nguyꢀn Minh Huy
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Chương 9: Xử lý tập tin - Nguyễn Minh Huy", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_nhap_mon_lap_trinh_chuong_9_xu_ly_tap_tin_nguyen_m.pdf

