Chuẩn hóa một xâu ký tự bằng file text năm 2024

Có 2 kiểu file là file text (bạn có thể đọc được nội dung) và file nhị phân, trong bài học này mình sẽ hướng dẫn cách dùng file text trước.

Cú pháp khai báo con trỏ FILE :

FILE *f;

Sau khi khai báo con trỏ file thì bạn có thể dùng nó để mở file với hàm fopen(), hàm này nằm trong thư viện

Cú pháp :

FILE *f; > f = fopen ("ten_file", "mode");

Tham số thứ nhất trong fopen() là tên file mà bạn muốn mở, nếu bạn sử dụng file nằm trong cùng thư mục với file mã nguồn thì bạn chỉ cần tên file

Ví dụ :

include "stdio.h"

int main(){ > FILE *f; > f = fopen("input.txt", "r"); > } > Nếu bạn muốn sử dụng file nằm đâu đó ở các thư mục khác với file mã nguồn thì bạn cần truyền vào tên file là đường dẫn duyệt đối.

Ví dụ :

include "stdio.h"

int main(){ > FILE *f; > f = fopen("C:/CNTT/28Tech/input.txt", "r"); > } >

Tham số thứ 2 trong hàm fopen() chính là mode mở file, nó sẽ chỉ định việc bạn mở file lên để đọc, ghi file và đang đọc ghi với file text hay file nhị phân

Các mode mở file chính :

ModeÝ nghĩaChú ýrMở file để đọcNếu file không tồn tại thì hàm fopen() trả về con trỏ NULLrbMở file để đọc theo kiểu file nhị phânNếu file không tồn tại thì hàm fopen() trả về con trỏ NULLwMở file để ghiNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớiwbMở file để ghi theo kiểu file nhị phânNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớiaMở file text lên để ghi tiếp vào cuối file mà không xóa nội dung cũ trong fileNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớiabMở file nhị phân lên để ghi tiếp vào cuối file mà không xóa nội dung cũ trong fileNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớir+Mở file để vừa đọc vừa ghiNếu file không tồn tại thì hàm fopen() trả về con trỏ NULLrb+Mở file để vừa đọc vừa ghi theo kiểu nhị phânNếu file không tồn tại thì hàm fopen() trả về con trỏ NULLw+Mở file để vừa đọc vừa ghiNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớiwb+Mở file để vừa đọc vừa ghi theo kiểu nhị phânNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớia+Mở file lên vừa để đọc và ghi vào cuối fileNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mớiab+Mở file để vừa đọc vừa ghi vào cuối file theo kiểu nhị phânNếu file đã tồn tại thì sẽ làm việc với file đó, nếu file chưa tồn tại sẽ tạo 1 file mới

Sau khi đọc ghi xong file bạn nên đóng file lại bằng hàm fclose()

Cú pháp :

FILE *f; fclose( f );


2. Ghi nội dung vào file

Để ghi nội dung vào file bạn làm tương tự như bạn in nội dung ra màn hình, các hàm ghi nội dung vào file thường có thêm chữ f ở trước.

Để ghi nội dung vào file thì bạn chỉ cần dùng hàm fprintf() là đủ.

Hàm fprintf() :

Hàm fprintf() được dùng để ghi nội dung vào file tương tự như hàm printf

Cú pháp :

int fprintf ( FILE f, const char format, ... );

Ví dụ 1 : Ghi 1 số nguyên, 1 số thực, 1 kí tự và 1 chuỗi ký tự vào trong file output.txt

include "stdio.h"

int main(){

FILE *f;  
f = fopen("output.txt", "w");  
char s[100] = "28tech.com.vn";  
printf("%d %.2lf %.c %s\n", 100, 3.14, '@', s);  
fclose(f);  
return 0;  
} File output.txt

100 3.14 @ 28tech.com.vn

Ví dụ 2 : Ghi vào file prime.txt các số nguyên tố từ 1 tới 200, mỗi dòng tối đa 10 số

include "stdio.h"

include "math.h"

int prime(int n){

if(n < 2) return 0;  
for(int i = 2; i <= sqrt(n); i++){  
    if(n % i == 0){  
        return 0;  
    }  
}  
return 1;  
} int main(){
FILE *f;  
f = fopen("prime.txt", "w");  
int dem = 0;  
for(int i = 1; i <= 200; i++){  
    if(prime(i)){  
        fprintf(f, "%d ", i);  
        ++dem;  
        if(dem % 10 == 0){  
            fprintf(f, "\n");  
        }  
    }  
}  
fclose(f);  
return 0;  
}

File prime.txt

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

Ví dụ 3 : Mở file output.txt và ghi tiếp vào cuối file

Để nội dung cũ trong file không bị xóa hết trước khi đọc thì bạn cần dùng mode mở là "a".

Bạn có thể chạy mã nguồn này nhiều lần và sẽ thấy nội dung cũ được giữ nguyên và việc ghi nội dung được thực hiện tiếp tục từ cuối file

FILE *f; f = fopen ("ten_file", "mode");

0

File output.txt sau 4 lần chạy mã nguồn

FILE *f; f = fopen ("ten_file", "mode");

1


3. Đọc nội dung từ file

Để đọc nội dung từ file bạn sử dụng 2 hàm chính là fscanf() và fgets(), ngoài ra còn có fgetchar()

Hàm fscanf()

Hàm này tương tự hàm scanf() mà bạn hay dùng khi đọc từ bàn phím, bây giờ bạn đọc từ file.

Cú pháp :

FILE *f; f = fopen ("ten_file", "mode");

2

Để đọc được file thì bạn cần biết file được lưu trữ như thế nào

Ví dụ 1 : Đọc số nguyên int, số thực double, chuỗi ký tự không có dấu cách trong file input.txt, sau đó in ra màn hình

FILE *f; f = fopen ("ten_file", "mode");

3

File input.txt

FILE *f; f = fopen ("ten_file", "mode");

4

Output :

FILE *f; f = fopen ("ten_file", "mode");

5

Ví dụ 2 : Đọc mảng số nguyên từ file input.txt và ghi vào file output.txt các số nguyên tố trong dãy

File input.txt có khuôn mẫu : Dòng đầu tiên là số lượng phần tử trong mảng, dòng thứ 2 là các số trong mảng

FILE *f; f = fopen ("ten_file", "mode");

6

Code :

FILE *f; f = fopen ("ten_file", "mode");

7

File output.txt

FILE *f; f = fopen ("ten_file", "mode");

8

Hàm fgets()

Hàm fgets() được sử dụng tương tự hàm gets(), dùng để đọc chuỗi ký tự có dấu cách.

Hàm này cũng bị trôi lệnh như hàm gets nên bạn cần lưu ý xử lý, ngoài ra nó còn đọc cả ký tự enter ở cuối dòng nên bạn cần loại bỏ ký tự enter này khỏi chuỗi

Cú pháp :

FILE *f; f = fopen ("ten_file", "mode");

9

Tham số :

  • char* str : Xâu bạn muốn lưu nội dung đọc được
  • num : Số lượng kí tự tối đa bạn muốn đọc
  • f : Con trỏ file

Ví dụ 1:

include "stdio.h"

int main(){

FILE *f;  
f = fopen("input.txt", "r");  
} 0

File input.txt

include "stdio.h"

int main(){

FILE *f;  
f = fopen("input.txt", "r");  
} 1

Output :

include "stdio.h"

int main(){

FILE *f;  
f = fopen("input.txt", "r");  
} 2

Ví dụ 2 : Xử lý trôi lệnh khi dùng fgets()

Nếu trước fgets() bạn dùng fscanf() và để dư kí tự enter sẽ bị trôi lệnh, cách xử lý là loại bỏ enter bằng hàm fgetc(), hàm này sẽ đọc 1 kí tự trong file

include "stdio.h"

int main(){

FILE *f;  
f = fopen("input.txt", "r");  
} 3

File input.txt :

include "stdio.h"

int main(){

FILE *f;  
f = fopen("input.txt", "r");  
} 4

Output :

include "stdio.h"

int main(){

FILE *f;  
f = fopen("input.txt", "r");  
} 5

Bạn cũng có thể thay fgetc() bằng fscanf(f, "\n");


Như vậy mình đã hướng dẫn xong cách đọc ghi file text trong C, bạn chỉ cần nắm chắc các hàm là fprintf(), fscanf(), fgets() và fgetc() là có thể làm việc với file một cách thuần thục.

Việc đọc ghi file giống với đọc ghi từ bàn phím và màn hình, có điều luồng vào và luồng ra khác nhau.