*
It-Pro Training

Xử lý dữ liệu tệp văn bản - Lập trình C : Bài 18


*

Xử lý dữ liệu tệp văn bản - Lập trình C : Bài 18

Xửlý dữ liệu tệp văn bản - thiết kế C : bài bác 18

1.Giới thiệu

Dữ liệu file văn phiên bản bao có một tập hợp những chuỗi kýtự và văn phiên bản được tổ chức thành dòng. Từng dòng bao gồm độ dài khác nhau, con số lớnnhất các kí tự trong một dòng là 256 ký tự. Mỗi mẫu được ghi lại bởi ký tự kếtthúc dòng hay dấu xuống dòng. Trong DOS đó là cặp ký kết tự tinh chỉnh CR(CarriageReturn: nhảy về đầu mẫu , mã số ASCII = 13, ‘ ’) cùng LF (Line Feed : nhảy thẳngxuống cái tiếp theo, mã số ASC II = 10, ‘ ’). Lúc lập trình C chỉ cần dùng‘ ’ là đủ để giải pháp 2 dòng.

Bạn đang xem: Đọc file txt trong c++

Ví dụ đoạn văn bạn dạng sau:

Lap Trinh C

123

Ket Thuc

Khi kia nếu xét theo cấu trúc của file văn phiên bản trongDOS đang như sau

Lap trinh C CR LF 123 CRLF Ket Thuc EOF

Khi lập trình sẵn C thì file *.c là một trong loại file văn bảnđược thực hiện để giữ trữ những đoạn mã chương trình C.

2.Làm việc với file văn bản

C hỗ trợ 4 hàm dưới đây để thực hiện đọc tệp tin văn bản.

+ fscanf()

+ fgets()

+ fgetc()

+ fread()

Với thao tác ghi tệp tin văn bản. C hỗ trợ 4 hàm sau

+ fprintf()

+ fputs()

+ fputc()

+ fwrite()

2.1 Hàm putc với puts.

2.1.1 Hàm putc()

Hàm putc triển khai ghi một ký kết tự vào một luồn dữ liệugắn với file. Giả dụ nói một cách dễ dàng thì nó tiến hành việc ghi dữ liệu mộtcharacter vào một file.

Cú pháp:

int putc(int ch, file *fp);

Mô tả :

+ch: là ký tự ao ước ghi vào trong file

+fp: bé trỏ trỏ mang lại File

giá trị trả về hàm putc:

+ còn nếu như không lỗi thì trả về đó là ch.

+ Nếu tất cả lỗi : trả về EOF (Có quý giá là 0).

Code minh họa

*

Hìnhsố 1 : lấy ví dụ về sử dụng hàm fputc

Khi chạy chương trình tác dụng sẽ ghi dữ liệu ra filefile.txt như sau

!"#$%&"()*+,-./0123456789:;?
ABCDEFGHIJKLMNOPQRSTUVWXYZ<>^_`abcd

2.1.2 Hàm puts()

Vai trò của hàm puts là ghi xâu kí trường đoản cú (string) vào luồngdữ liệu, luồng tài liệu này ghắn kết cùng với file. Hiệu quả hàm triển khai ghi xâu ký tựvào trong tệp tin này.

Cúpháp

charfputs(char *str, tệp tin *fp);

str: nhỏ trỏ hình trạng char, bản chất nó chủ yếu xâu cam kết tự

fp:con trỏ file

Hàmtrả về một cực hiếm không âm nếu quy trình ghi file thành công

Nếulỗi hàm đã trả về EOF (Có giá trị 0).

Vídụ

*

Hìnhsố 2 : ví dụ như về áp dụng hàm fputs

Hàm tiến hành ghi 2 dòng “Ngon dại lap trinh C” và“Lam viec voi tệp tin Van Ban” vào file.txt. Vì áp dụng fopen(“file.txt”,”w+”) dovậy trường hợp file.txt đang tồn trên thì thực hiện xóa file này với tạo new file. Ngược lạinếu chưa có file.txt thì sẽ tiến hành tạo bắt đầu file.txt.

Khi thực hiện fputs(“Ngon dại dột Lap trinh C . ”,fp); thìsẽ ghi xây ký tự “Ngon dại dột Lap trinh C” vào file. Kêt thúc dòng này là thực hiệnxuống dòng.

Vậy lúc đó dữ liệu sẽ được ghi vào file.txt trên 2dòng riêng biệt biệt.

2.2 chấm dứt file (EOF – over of File)

Khi thực hiện đọc file, làm ráng nào để khẳng định đượcquá trình hiểu là kết thúc. Bao gồm một bí quyết là nhờ vào kí tự đặc trưng để ghi lại kếtthúc file.

Ví dụ

+ Kí từ # được để để xác định dòng cuối cùng

+ trong DOS thực hiện Ctr-z như là một trong những ký tự đặc trưng để xác định kết thúc file.

+ trong UNIX áp dụng Ctr-d như là một ký tự đặc trưng để xác định hoàn thành file.

Xácđịnh chấm dứt file

Đôi khi không biết đúng chuẩn mất thời hạn bao thọ đểđọc tài liệu của một tệp tin tính từ thời điểm bắt đầu tiến trình gọi file đến khikết thúc các bước đọc file.

Có 2 phương pháp để xác định kết thúc một file, khi đọc dữ liệufile văn bản, quy trình xử lý đã đọc từngkí trường đoản cú một, lúc đó lập trình viên có thể đọc được kí tự đánh dấu xong xuôi file.

Các hằng số biểu tượng EOF được khái niệm trongstdio.h có mức giá trị là -1. Khi triển khai các hàm đọc tài liệu file văn phiên bản theocách thức đọc từng kí tự, thì quá trình đọc được thực hiện cho tới khi chạm chán kí tựđánh dấu dứt file.

Vì ở đây quá trình đọc được thực hiện cho đến khi gặpkí tự tấn công dấu xong file nên các lập trình viên thường thực hiện while hoặcdo - while

while((c= fgetc(fp)) != EOF)

Hàm fgetc(fp) trả về một char, trong trường hợpfgetc(fp) == EOF thì hoàn thành quá trình gọi file.

2.3. Các hàm fgetc với fgets

Sử dụng những hàm fgetc với fgets ship hàng cho quy trình đọcdữ liệu từ file văn bản.

Xem thêm: Cách Sử Dụng Máy Xay Sinh Tố Đơn Giản Và Hiệu Quả, Cách Sử Dụng Máy Xay Sinh Tố Chuẩn Nhất!

2.3.1 Hàm fgetc

Hàm fgetc() được sử dụng để gọi một kí từ bỏ từ dữ liệu từfile văn bản.

Cúpháp

intgetc(FILE *fp);

đọc một ký kết tự trường đoản cú tệp văn bạn dạng được khẳng định bởi con trỏFILE *fp. Fp là tham số hình thức có kiểu bé trỏ. Fp là hiệu quả thực hiện tại củahàm fopen();

Vậy tại sao tại sao getc được thực hiện để đọc từng kí tựcủa FILE mà lại có kết quả trả về là int? vì sao đó là khi triển khai đọc file,ký tự tấn công dấu dứt file (EOF) có mức giá trị int chứ không phải char.

Vídụ

Sử dụng hàm getc đọc toàn thể ký từ bỏ được ghi trongfile.txt khớp ứng với lấy ví dụ hình số 2.

Codeminh họa

*

Hìnhsố 3: thực hiện hàm fgetc để đọc file

Sử dụng while nhằm kiểm tra xong xuôi file (EOF) lúc thựchiện hiểu file. Kết quả thực hiện tại in ra được 2 xâu đựng chuỗi cam kết tự.

2.3.2 Hàm fgets

Hàm fgets được sử dụng đọc xâu kí trong tệp tin văn bản tựtheo dòng.

Cúpháp

char*fgets(char *str, int n, file *fp);

Môtả

str: nhỏ trỏ char thực ra là string, bản chất là mảng chars

n:số lượng character lớn số 1 khi thực hiện đọc, ỏ đây chính là kích kích cỡ của mảngchar

fp:con trỏ file

Hàm sẽ thực hiện dừng gọi file văn bản khi một trongcác điều kiện sau đấy là đúng.

+ Đọc được n-1 bytes.

+ gặp gỡ một mẫu mới

+ Đọc khi chạm mặt kí tự xong file.

+ Đọc lúc lỗi xuất hiện.

Vídụ

Sử dụng hàm fgets để đọc tệp tin “file.txt” làm việc ví dụ đượctrình bày trên hình 2.

Code minh họa

*

Hìnhsố 4: áp dụng hàm fgets

Khi thực hiện hàm fgets để đọc ngôn từ của “file.txt”,sử dụng while để thực hiện đọc từng dòng dữ liệu text. Và thực hiện in ra kếtquả bằng việc áp dụng hàm printf.

2.3.3Hàm fscanf

Hàm đọc cực hiếm từ tệp văn bản. Hàm này call là hàm hướngtrường dữ liệu (field-oriented function). Đặc trưng của hàm ngày cũng tương tựnhư hàm scanf. Hàm scanf khi đọc dữ liệu từ bàn phím, nếu gặp mặt ký trường đoản cú trống thì lậptức nó coi như kí tự chia cách giữa những trường và dứt việc đọc dữ liệu đâylà vấn đề có sự khác biệt giữa hàm scanf và hàm gets.

Ví dụ Hàm scanf

*

Hìnhsố 5 : Hàm scanf

Trong ví dụ như trên : lúc nhập “Programming C with file”,thì nội dung thông tin in ra là “Programming” điều đó tức là hàm scanf khigặp vết trống lập tức xong việc ghi thông tin.

Nếu vắt hàm scanf băng hàm gets thì văn bản thôngtin sẽ tiến hành hiển thị đầy đủ

Code minh họa

*

Hìnhsố 6 : Hàm gets

Tương từ bỏ như fscanf được sử dụng để phát âm file, lúc gặpdấu trống thì hàm fscanf dẽ coi nó như dấu phân cách giữa những trường. Bởi nó làhàm hướng trường dữ liệu thế nên nó sẽ kết thúc quá trình phát âm 1 ngôi trường thông tin(1 cột) khi chạm chán dấu chia cách giữa các trường.

Ví dụ:

Lưu ý khi gọi file văn bản, để có thể chắn họ sử dụnghàm rewind() để tùy chỉnh cấu hình vị trí bé trỏ gọi file về đầu file.

char str<100>;

FILE * fp;

fp= fopen ("file.txt", "r");

fscanf(fp, "%s",str);

printf("Read String |%s| ", str );

Khi đó hiệu quả in ra chỉ là “Ngon”,

Vậy hàm fscanf nếu như đọc các file văn phiên bản có format duoidạng những cột tin tức hay các bảng chứa dữ liệu thì độ hiện quả sẽ rất tốt.