Bài giảng Kỹ thuật lập trình - Chuỗi ký tự và tệp tin cung cấp cho người học các kiến thức: Các dạng chuỗi ký tự, các dạng ký tự và chuỗi mở rộng, các dạng ký tự và chuỗi mở rộng, các thao tác trên tập tin, kỹ thuật lập trình trên tập tin,.... Mời các bạn cùng tham khảo nội dung chi tiết.
Kỹ thuật lập trình ThS Đặng Bình Phương (dbphuong@fit.hcmus.edu.vn) CuuDuongThanCong.com https://fb.com/tailieudientucntt Các dạng chuỗi ký tự Các dạng ký tự chuỗi mở rộng Các dạng tập tin theo góc độ người lập trình Các thao tác tập tin Kỹ thuật lập trình tập tin Các vấn đề tìm hiểu mở rộng kiến thức nghề nghiệp Thuật ngữ tiếng Anh đọc thêm tiếng Anh 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt CuuDuongThanCong.com https://fb.com/tailieudientucntt • Dữ liệu chuỗi chuỗi ký tự giống đối số hàm printf() “Hello, World”, “Data.txt” • C/C++ không xây dựng sẵn kiểu liệu sở dạng chuỗi mà thay cách sau: – NNLT C: sử dụng mảng ký tự theo qui ước chuỗi ký tự – NNLT C++: sử dụng lớp string thư viện chuẩn (C++ STL) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Khái niệm – NNLT C sử dụng mảng phần tử kiểu char để lưu chuỗi ký tự qui ước ký tự kết thúc chuỗi ‘\0’ (ký tự có mã ASCII 0) – Một mảng ký tự gồm n phần tử lưu chuỗi tối đa n – ký tự • Ví dụ char str[10] = “tab”; char* name = “KTLT”; 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Một số điểm lưu ý – Người lập trình phải chủ động kiểm sốt số lượng ký tự tối đa chuỗi ký tự, không để xảy dùng lố số lượng tối đa – Không thể gán giá trị, sử dụng phép toán + (ghép chuỗi), > (lớn hơn), < (nhỏ hơn) Thay vào dùng hàm thư viện 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt • Các thao tác chuỗi thực nhờ hàm chuỗi ký tự thư viện hàm khai báo – – – – – – – – – – 2/27/2014 strlen(): trả độ dài chuỗi strcat(): nối chuỗi strcpy(): chép chuỗi strdup(): tạo chuỗi strcmp(), stricmp(): so sánh chuỗi strchar(): tìm ký tự chuỗi strstr(): tìm chuỗi chuỗi strlwr(), strupr(): đổi thành chuỗi thường, chuỗi in strrev(): đảo chuỗi strtok(): tách chuỗi CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt size_t strlen(const char* s) Tính độ dài chuỗi s size_t thay cho unsigned (trong ) dùng để đo đại lượng khơng dấu Độ dài chuỗi s (khơng tính ký tự kết thúc) char s[] = “Visual C++ 6.0”; int len = strlen(s); // => 14 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt char* strcat(char* dest, const char* src) Nối chuỗi src vào sau chuỗi dest ! Chuỗi dest phải đủ chứa kết Con trỏ đến chuỗi nối char s1[100] = “Visual C++”; char s2[] = “6.0”; strcat(s1, “ ”); // => “Visual C++ ” strcat(s1, s2); // => “Visual C++ 6.0” 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt char* strcpy(char* dest, const char* src) Sao chép chuỗi src sang chuỗi dest, dừng ký tự kết thúc chuỗi ‘\0’ vừa chép ! dest phải đủ lớn để chứa src Con trỏ dest char s[100]; s = “Visual C++ 6.0”; strcpy(s, “Visual C++ 6.0”); 2/27/2014 CuuDuongThanCong.com // sai // Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 10 int fcloseall() Đóng tất stream mở ngoại trừ stream chuẩn stdin, stdout, stdprn, stderr, stdaux Nên đóng stream thay đóng tất Thành cơng: trả số lượng stream đóng Thất bại: trả EOF FILE* fp1 = fopen(“taptin1.txt”, “rt”); FILE* fp2 = fopen(“taptin2.txt”, “wt”); … fcloseall(); 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 41 • Khái niệm – Được tạo tự động mở tập tin – Xác định nơi diễn việc đọc/ghi tập tin • Vị trí trỏ vị – Khi tập tin chưa mở: đầu tập tin (giá trị 0) – Khi mở tập tin: • Ở cuối tập tin mở để chèn (mode a hay a+) • Ở đầu tập tin (hay giá trị 0) mở với mode khác (w, w+, r, r+) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 42 • Truy xuất (sequentially access) – Phải đọc/ghi liệu từ vị trí trỏ vị đến vị trí n-1 trước đọc liệu vị trí n – Khơng cần quan tâm đến trỏ vị trỏ vị tự động chuyển sang vị trí sau thao tác đọc/ghi liệu • Truy xuất ngẫu nhiên (random access) – Có thể đọc/ghi vị trí tập tin mà khơng cần phải đọc/ghi tồn liệu trước => quan tâm đến trỏ vị 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 43 void rewind(FILE *fp) Đặt lại vị trí trỏ vị đầu (byte 0) tập tin fp Không FILE* fp = fopen(“taptin.txt”, “w+”); fprintf(fp, “0123456789”); rewind(fp); fprintf(fp, “*****”); 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 44 int fseek(FILE *fp, long offset, ing origin) Đặt vị trí trỏ vị stream fp với vị trí offset so với cột mốc origin (SEEK_SET hay 0: đầu tập tin; SEEK_CUR hay 1: vị trí tại; SEEK_END hay 2: cuối tập tin) Thành công: trả Thất bại: trả giá trị khác FILE* fp = fopen(“taptin.txt”, “w+”); fseek(fp, 0L, SEEK_SET); // rewind(fp); fseek(fp, 0L, SEEK_END); // cuối tập tin fseek(fp, -2L, SEEK_CUR);// lùi lại vị trí 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 45 long ftell(FILE *fp) Hàm trả vị trí trỏ chị vị (tính từ vị trí tập tin, tức 0) stream fp Thành công: trả vị trí trỏ vị Thất bại: trả -1L FILE* fp = fopen(“taptin.txt”, “rb”); fseek(fp, 0L, SEEK_END); long size = ftell(fp); printf(“Kich thuoc tap tin la %ld\n”, size); 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 46 CuuDuongThanCong.com https://fb.com/tailieudientucntt • Lập trình tập tin gồm mẩu tin • Các thuật toán tập tin nhị phân (thao tác vật lý không quan tâm cấu trúc nội dung tập tin) – Tính kích thước, cắt, ghép – Xáo trộn, phục hồi, mã hóa, giải mã – Nén giải nén • Lập trình tập tin có cấu trúc – Kiểm tra dạng tập tin dựa ràng buộc – Thao tác tập tin ảnh BMP – Xuất liệu tập tin HTML – Đọc, ghi, chuyển đổi tập tin văn dạng mở rộng (Unicode 16 UTF-8) 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 48 CuuDuongThanCong.com https://fb.com/tailieudientucntt • • • • Kiến trúc thư viện nhập xuất C++ Cấu trúc vài tập tin sở liệu Cấu trúc số tập tin ảnh Tập tin XML việc lập trình 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 50 CuuDuongThanCong.com https://fb.com/tailieudientucntt • • • • • • • • • • • binary file: tập tin nhị phân end of file, EOF character: ký hiệu kết thúc tập tin file processing: xử lý tập tin Hypertext Markup Language: ngôn ngữ HTML dùng để lưu trữ tập tin văn thô có cấu trúc dùng cho trình duyệt web line: dòng (văn bản) multi-byte character: ký tự lưu trữ nhiều byte random access: truy xuất ngẫu nhiên read only: phép đọc record (danh từ): mẩu tin Rich Text Format: định dạng RTF, lưu đĩa dạng văn ASCII có cấu trúc, dùng để lưu trữ văn phức hợp có thơng tin định dạng lẫn biểu, hình ảnh sequentially access: truy xuất 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 52 • • • • • • • • string: chuỗi ký tự string elements: phần tử (ký tự) nằm chuỗi string functions: hàm thao tác chuỗi ký tự string operator: phép toán thao tác chuỗi ký tự stream: khái niệm dùng lập trình ngơn ngữ C/C++, dòng liệu nhập xuất, dùng đọc ghi liệu tập tin hay thiết bị nhập xuất tab: ký tự tab (tương đương với số khoảng trống hiển thị) text file, plain text, ASNI text (hay ASCII text): nói chung định dạng văn đơn giản soạn trình soạn thảo thông dụng hệ điều hành Unicode text, UTF-8 text: định dạng văn thô dạn mở rộng, ký tự chiếm nhiều byte lưu trữ nhớ hay đĩa 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 53 • Theory and Problems of Fundamentals of Computing with C++, John R.Hubbard, Schaum’s Outlines Series, McGraw-Hill, 1998 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt 54 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt • • • • Ký tự Unicode UTF-8 Dạng chuỗi ký tự mở rộng Chuỗi ký tự tiếng Việt chuyển đổi mã Các hàm xử lý chuỗi ký tự mở rộng 2/27/2014 CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt... tiên/cuối khác với ký tự hay chuỗi cho trước swap(): hoán chuyển nội dung chuỗi char* c_str(): trả chuỗi ký tự dạng cũ C (ký tự kết thúc NULL) CuuDuongThanCong.com Khoa CNTT - ĐH Khoa học tự nhiên https://fb.com/tailieudientucntt... sánh chuỗi strchar(): tìm ký tự chuỗi strstr(): tìm chuỗi chuỗi strlwr(), strupr(): đổi thành chuỗi thường, chuỗi in strrev(): đảo chuỗi strtok(): tách chuỗi CuuDuongThanCong.com Khoa CNTT - ĐH Khoa