Trong phần đầu tiên, tôi xin giới thiệu với các bạn cách đọc, ghi file trong C, bao gồm 2 cách đọc, ghi chính:
- Đọc, ghi số từ file.
- Đọc, ghi chuỗi kí tự từ file.
Sau đây, chúng ta sẽ làm các ví dụ với từng cách đọc/ghi.
Đọc, ghi số từ file
Ví dụ, trong bài tập số 4 của chúng ta (http://eggclub.org/2016/11/22/noi-dung-hoc-tuan-4/) , yêu cầu đầu vào là một file có dạng:
1 2 3 |
5 1700 6500 9500 1100 4500 0.7 0.1 0.8 0.4 0.6 |
Trong đó, dòng đầu tiên là một số nguyên n. 2 dòng tiếp theo, mỗi dòng có n số, trong đó dòng thứ 2 là các số nguyên và dòng thứ 3 là các số thực.
Sau khi đọc được các số từ file, chúng ta sẽ ghi những số này ra một file output.txt với định dạng tương tự file input.txt.
Đọc file
Để đọc được file này, chúng ta sẽ thực hiện các bước sau:
1. Khai báo biến con trỏ để trỏ đến file cần đọc với chế độ đọc file.
1 |
FILE *fpInput = fopen("input.txt", "r"); |
2. Kiểm tra xem file đó có tồn tại hay không.
1 2 3 4 |
if (fpInput == NULL) { printf("Can't open file!"); } |
3. Nếu file tồn tại, tiến hành đọc file.
Dòng đầu tiên là một số nguyên n:
1 |
fscanf(fpInput, "%d", &n); |
Dòng tiếp theo là n số nguyên:
1 2 3 4 |
int a[20]; for (int i = 0 ; i < n ; i ++){ fscanf(fpInput, "%d", &a[i]); } |
Dòng sau đó là n số thực:
1 2 3 4 |
float b[20]; for (int i = 0 ; i < n ; i ++){ fscanf(fpInput, "%f", &b[i]); } |
4. Sau khi đọc xong, chúng ta tiến hành đóng file:
1 |
fclose(fpInput); |
Đó là các bước để đọc file gồm các số.
Ghi file
Sau khi đọc file, ta sẽ ghi các số này vào file output.txt có cùng định dạng với file input.txt:
1. Khai báo biến con trỏ để trỏ đến file cần ghi với chế độ ghi file.
1 |
FILE *fpOutput = fopen("output.txt", "w"); |
2. Tiến hành đọc file.
Dòng đầu tiên là một số nguyên n:
1 |
fprintf(fpOutput, "%d", n); |
Dòng tiếp theo là n số nguyên:
1 2 3 |
for (int i = 0 ; i < n ; i ++){ fprintf(fpOutput, "%d", a[i]); } |
Dòng sau đó là n số thực:
1 2 3 |
for (int i = 0 ; i < n ; i ++){ fprintf(fpOutput, "%f", b[i]); } |
4. Sau khi đọc xong, chúng ta tiến hành đóng file:
1 |
fclose(fpOutput); |
Đọc, ghi chuỗi từ file
Trong bài toán ATM learns English (http://eggclub.org/2016/11/01/bai-giang-phan-3/) ta có file vocabs.txt chứa các từ mới mà ATM đã học được:
1 2 3 4 5 6 |
hello hi old year computer mouse |
Ta sẽ tiến hành đọc file này, sau đó ta thêm vào 2 từ mới và ghi lại vào file vocabs.txt.
Để thuận tiện việc xử lí chuỗi, ta sử dụng thư viện string của c++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <string> #include <conio.h> #include <cstdio> int main() { FILE *fpInput = fopen("vocabs.txt", "r"); if (fpInput == NULL) { printf("Can't open file!"); } string word; string vocabs[20]; int numberOfWord = 0; // kiểm tra, nếu đọc đến hết file thì sẽ dừng lại while (fscanf(fpInput , "%s", word) != EOF) { vocabs[numberOfWord] = word; numberOfWord ++; } fclose(fpInput ); vocabs[numberOfWord++] = "keyboard"; vocabs[numberOfWord++] = "shoe"; FILE *fpOutput = fopen("vocabs.txt", "w"); for (int i = 0 ; i < numberOfWord ; i ++){ fprintf(fpOutput, "%s\n", vocabs[i]); } fclose(fpOutput); return 0; } |
Vậy là chúng ta đã thực hiện được các phần đọc, ghi file cơ bản. Trong phần tiếp theo, chúng ta sẽ thực hiện các phần đọc, ghi file nâng cao hơn.
cuongvc
Latest posts by cuongvc (see all)
- [Chủ đề thảo luận] Đệ quy - 2017-01-04
- Nội dung buổi offline 03, ngày 11/12/2016 - 2016-12-15
- Bài tập số 7: ATM đi bán hàng - 2016-12-14