Cùng tìm hiểu về cách ghi file trong C++. Ngôn ngữ C++ kế thừa các hàm dùng để ghi file từ ngôn ngữ C như fputc, fputs, hay fprintf, và bạn sẽ học được cách sử dụng chúng để ghi file trong C sau bài học này.
Chúng ta có 3 phương pháp ghi file trong C++ bằng cách sử dụng các hàm kế thừa từ C như sau:
- Ghi từng ký tự vào file bằng hàm fputc
- Ghi từng dòng file trong C++ bằng hàm fputs
- Ghi từng dòng file theo định dạng chỉ định bằng hàm fprintf
Bài viết này sẽ chú trọng về cách Ghi file trong C++. Về quy trình tổng quát xử lý file trong C++, hãy tham khảo tại bài sau:
- Xem thêm: Xử lý file trong C++
Trước khi ghi file trong C++
Để ghi file trong C++, bạn cần phải mở nó trước bằng một trong hai hàm ghi file là fopen hoặc fopen_s mà Kiyoshi đã hướng dẫn trong bài Mở file trong C++.
Lưu ý là tùy thuộc vào mục đích của việc ghi file mà mode dùng để mở file cũng sẽ khác nhau, do vậy chúng ta cần hết sức chú ý khi lựa chọn mode khi mở file.
Ở đây, mode ghi file chính là thông tin về những việc cần làm với một file. Các mode có thể dùng để ghi file trong C++ như sau:
Mode | Xử lý | Chức năng |
---|---|---|
w | Mở để ghi đè | Xoá nội dung cũ và ghi đè nội dung mới Nếu file không tồn tại thì tạo file mới |
a | Mở để ghi chèn | Ghi chèn nội dung mới vào cuối file Nếu file không tồn tại thì tạo file mới |
r+ | Mở để đọc và ghi đè | Cho phép cả đọc và ghi đè Nếu file không tồn tại thì trả về NULL |
w+ | Mở để đọc và ghi đè | Cho phép cả đọc và ghi đè Nếu file không tồn tại thì tạo file mới |
a+ | Mở để đọc và ghi chèn | Cho phép cả đọc và ghi chèn Nếu file không tồn tại thì tạo file mới |
Ví dụ, nếu bạn chỉ muốn mở để ghi đè file, hãy dùng tới mode w như sau:
FILE * fp = NULL; |
Hoặc nếu bạn muốn mở để ghi chèn file, hãy dùng tới mode a như sau:
FILE * fp = NULL; |
Tuy nhiên nếu bạn muốn mở file và để vừa ghi và vừa ghi đè file đó, lúc này mode cần dùng để mở file không phải là mode w, mà sẽ là mode r+ chẳng hạn.
FILE * fp = NULL; |
Chi tiết về các mode ghi file cũng được trình bày đầy đủ trong bài Mở file trong C++.
Sau khi đã mở file thành công bằng một trong hai hàm trên, lúc này chúng ta đã có thể tiến hành ghi dữ liệu vào file trong C++ với các phương pháp sau đây.
Ghi ký tự vào file bằng hàm fputc
Hàm fputc trong C++ là một hàm có sẵn trong thư viện chuẩn, có tác dụng ghi từng ký tự vào file chỉ định. Tên hàm fputc được viết tắt bởi cụm từ file, put và character, được dịch theo tiếng Việt chính xác là hàm ghi từng ký tự vào file.
Chúng ta sử dụng hàm fputc trong C++ với cú pháp sau đây:
int fputc(int char, FILE * fp);
Trong đó:
fp
là con trỏ của file cần ghi, được tạo ra từ việc mở file ở phần trên.char
là ký tự cần ghi vào file
Hàm fputc sẽ trả về ký tự đã được ghi vào file. Trong trường việc ghi file thất bại thì giá trị EOF sẽ được trả về.
Ví dụ cụ thể, chúng ta sẽ ghi dòng text Hello vào file trống sample.txt. Chúng ta sẽ dùng hàm fopen để mở file, sau đó ghi từng ký tự có trong dòng nội dung này vào file bằng hàm fputc như sau:
|
Kết quả, các ký tự trong chuỗi sẽ được lần lượt ghi vào file sample.txt như sau:
Hello |
Ghi chuỗi vào file trong C++ bằng hàm fputs
Hàm fputs trong C++
Việc ghi từng ký tự vào file bằng hàm fputc thật là vất vả phải không nào? Đó là lý do mà hàm fputs với chức năng ghi chuỗi vào file đã được ra đời.
Hàm fputs trong C++ là một hàm có sẵn trong thư viện chuẩn, có tác dụng ghi từng chuỗi vào file chỉ định. Tên hàm fputs được viết tắt bởi cụm từ file, put và string, được dịch theo tiếng Việt chính xác là hàm ghi chuỗi vào file.
Chúng ta sử dụng hàm fputs trong C++ với cú pháp sau đây:
int fputs(const char * str, FILE * fp);
fp
là con trỏ của file cần ghi, được tạo ra từ việc mở filestr
là con trỏ tới nơi lưu trữ chuỗi đã ghi từ dòng vào file. Thông thường chúng ta chỉ định str bằng một chuỗi.
Hàm fputs sẽ trả về 0 nếu việc ghi chuỗi vào file thành cônt. Trong trường hợp việc ghi file thất bại thì EOF sẽ được trả về.
Lưu ý là hàm fputs không tự động ghi ký tự xuống dòng \n
sau khi đã ghi chuỗi, do đó khi muốn xuống dòng khi ghi chuỗi thì chúng ta phải tự điền ký tự \n
vào vị trí cần xuống dòng trong chuỗi.
Ví dụ dùng hàm fputs để ghi chuỗi vào file trong C++
Ví dụ cụ thể, chúng ta sẽ ghi nội dung sau vào file trống Hello.txt.
Hello World! I am Kiyoshi
Chúng ta sẽ dùng hàm fopen để mở file, sau đó ghi các chuỗi này vào file bằng hàm fputs như sau:
|
Kết quả, chuỗi chỉ định sẽ được lần lượt ghi vào file sample.txt như sau:
Hello World! |
Ghi dữ liệu vào file trong C++ theo định dạng bằng hàm fprintf
Hàm fprintf trong C++ là gì
Hàm fprintf trong C++ là một hàm có sẵn trong thư viện chuẩn, có tác dụng ghi dữ liệu vào file theo định dạng chỉ định.
Bằng cách sử dụng hàm fprintf, chúng ta có thể định dạng các dữ liệu thuộc nhiều kiểu khác nhau, và sau đó ghi chúng vào các file có định dạng cố định như file CSV, JSON chẳng hạn.
Chúng ta sử dụng hàm fprintf trong C++ với cú pháp sau đây:
int fprintf(fp, "fo1 fo2 fo3"
, var1, var2, var3);
Trong đó
fp
là con trỏ của file cần ghi, được tạo ra từ việc mở file ở phần trên.- Các cặp
fo
vàvar
tương ứng là định dạng (format) ghi vào file của dữ liệu, và tên biến chứa dữ liệu đó.
Cơ chế hoạt động của hàm fprintf là lấy dữ liệu từ biến var
, định dạng nó theo định dạng ghi trong fo
để tạo ra một chuỗi. Sau đó thì ghi chuỗi vừa tạo này vào file mà con trỏ fp
chỉ đến.
Hàm fprintf sẽ trả về một số thuộc kiểu int, chính là số ký tự có trong chuỗi được tạo. Trong trường hợp việc ghi file thất bại thì giá trị EOF sẽ được trả về.
Định dạng dữ liệu sử dụng trong hàm fprintf
Định dạng (format) của dữ liệu cần ghi cũng như kiểu của biến lưu dữ liệu được tóm tắt trong bảng dưới đây:
Định dạng chuyển đổi | Kiểu biến | Chi tiết |
---|---|---|
%hhd | char unsigned char | Chuyển về dạng thập phân và lưu trữ trong biến 1 byte |
%hd | short unsigned short | Chuyển về dạng thập phân và lưu trữ trong biến 2 byte |
%d | int unsigned int | Chuyển về dạng thập phân và lưu trữ trong biến kiểu int |
%ld | long unsigned long | Chuyển về dạng thập phân và lưu trữ trong biến 4 byte |
%hhx | char unsigned char | Chuyển về hệ thập lục phân và lưu trữ trong biến 1 byte |
%hx | short unsigned short | Chuyển về hệ thập lục phân và lưu trữ trong biến 2 byte |
%x | int unsigned int | Chuyển về hệ thập lục phân và lưu trữ trong biến kiểu int |
%lx | long unsigned long | Chuyển về hệ thập lục phân và lưu trữ trong biến 4 byte |
%f | float | Chuyển về số thực dấu phẩy động và lưu trữ trong biến kiểu float |
%lf | double | Chuyển về số thực dấu phẩy động và lưu trữ trong biến kiểu double |
%c | char | Chuyển về 1 ký tự và lưu trữ trong biến kiểu char |
%s | char * | Chuyển về chuỗi ký tự và lưu trữ trong biến kiểu mảng char |
%p | void * | Chuyển về địa chỉ và lưu trữ trong con trỏ |
Ví dụ ghi dữ liệu vào file trong C++
Giả sử chúng ta có các kiểu thông tin như [chuỗi], [ký tự] và [số] được lưu vào các biến tương ứng. Bằng cách sử dụng hàm fprintf, chúng ta có thể định dạng các thông tin này và ghi vào file như chương trình sau đây:
|
Kết quả, các dữ liệu với định dạng chỉ định sẽ được vào file Hello.txt như sau:
Kiyoshi M 30 |
Giống như thế, các kiểu thông tin như [chuỗi], [ký tự] và [số] sẽ được ghi theo định dạng chỉ định vào file.
Ghi mảng vào file trong C++
Ứng dụng hàm fprintf, chúng ta có thể thực hiện ghi mảng vào file trong C++.
Do các phần tử trong mảng C++ đều có cùng kiểu dữ liệu, nên chúng ta có thể chỉ định cùng kiểu định dạng để ghi các phần tử từ mảng vào file bằng hàm hàm fprintf. Ví dụ cụ thể:
|
Kết quả, nội dung mảng sẽ được ghi vào file như sau:
10 20 44 60 82 |
Một cách tương tự thì chúng ta cũng có thể ghi các mảng 2 chiều vào file trong C++. Khi đó mỗi mảng con 1 chiều trong mảng 2 chiều sẽ được coi như một dòng để ghi vào file, và chúng ta cần phải thêm ký tự xuống dòng \n
khi ghi từng mảng dòng vào file như sau:
|
Kết quả, từng dòng sẽ được ghi vào file như sau:
Toan: 7 Van: 9 Anh: 8 |
- Xem thêm: Mảng 2 chiều trong C++
Ghi cấu trúc vào file trong C++
Ứng dụng hàm fprintf, chúng ta có thể thực hiện ghi cấu trúc vào file trong C++.
Do các thành viên trong cấu trúc C++ có thể có kiểu dữ liệu khác nhau, nên chúng ta cần chỉ định kiểu định dạng phù hợp cho từng thành viên để ghi giá trị của chúng từ mảng vào file bằng hàm hàm fprintf.
Ví dụ chúng ta ghi dữ liệu từ mảng cấu trúc vào file trong C++ bằng hàm fprintf như sau:
|
Kết quả, nội dung mảng cấu trúc sẽ được ghi vào file như sau:
name sex age height weight |
- Xem thêm: Kiểu cấu trúc trong C++ là gì
- Xem thêm: Mảng cấu trúc trong C++
Ghi file CSV trong C++
Ở phần trên, chúng ta đã tiến hành ghi nội dung các kiểu dữ liệu phức tạp như mảng hay cấu trúc vào file dưới dạng file txt rồi. Tuy nhiên chúng ta cũng có thể ghi dữ liệu trên vào file CSV trong C++, đơn giản bằng cách thay đổi đuôi file từ .txt sang .csv là xong.
Ví dụ cụ thể, chúng ta ghi dữ liệu từ mảng cấu trúc vào file CSV trong C++ bằng hàm fprintf như sau. Lưu ý là chúng ta cần viết định dạng các dữ liệu cách nhau bởi dấu phẩy để có thể ghi từng dữ liệu vào từng ô trong file CSV.
|
Kết quả, nội dung mảng cấu trúc sẽ được ghi vào file people.csv như sau:
Tổng kết
Trên đây Kiyoshi đã hướng dẫn các bạn về cách ghi file trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.
URL Link
https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/file-trong-cpp/ghi-file-trong-cpp/
HOME › lập trình c++ cơ bản dành cho người mới học lập trình>>27. file trong c++