ĐỌC TỪNG DÒNG TRONG FILE C

*
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 dạng - lập trình sẵn C : bài 18

1.Giới thiệu

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

Bạn đang xem: Đọc từng dòng trong file c

Ví dụ đoạn văn phiên bản sau:

Lap Trinh C

123

Ket Thuc

Khi kia nếu xét theo cấu tạo của tệp tin văn bản trongDOS đã như sau

Lap trinh C CR LF 123 CRLF Ket Thuc EOF

Khi xây dựng C thì file *.c là một trong những loại file văn bảnđược thực hiện để giữ trữ các đoạn mã công tác C.

2.Làm vấn đề với file văn bản

C hỗ trợ 4 hàm tiếp sau đây để thực hiện đọc file 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 cùng với file. Trường hợp nói một cách đơn giản và dễ dàng thì nó tiến hành việc ghi tài liệu mộtcharacter vào một trong những file.

Cú pháp:

int putc(int ch, file *fp);

Mô tả :

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

+fp: bé trỏ trỏ cho File

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

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

+ Nếu bao gồm lỗi : trả về EOF (Có quý giá là 0).

Code minh họa

*

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

Khi chạy chương trình công dụng sẽ ghi tài 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í từ (string) vào luồngdữ liệu, luồng tài liệu này ghắn kết cùng với file. Công dụng hàm thực hiện ghi xâu ký kết tựvào trong tệp tin này.

Cúpháp

charfputs(char *str, file *fp);

str: bé trỏ kiểu dáng char, thực chất nó thiết yếu xâu ký kết tự

fp:con trỏ file

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

Nếulỗi hàm đang trả về EOF (Có cực hiếm 0).

Vídụ

*

Hìnhsố 2 : lấy một ví dụ về áp dụng hàm fputs

Hàm thực hiện ghi 2 loại “Ngon đần độn lap trinh C” và“Lam viec voi file Van Ban” vào file.txt. Vì thực hiện fopen(“file.txt”,”w+”) dovậy nếu file.txt vẫn tồn tại thì thực hiện xóa tệp tin này cùng tạo mới file. Ngược lạinếu chưa tồn tại file.txt thì sẽ thực hiện tạo bắt đầu file.txt.

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

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

2.2 xong file (EOF – over of File)

Khi thực hiện đọc file, làm nuốm nào để xác định đượcquá trình phát âm là kết thúc. Tất cả một giải pháp là phụ thuộc vào kí tự đặc trưng để khắc ghi kếtthúc file.

Ví dụ

+ Kí từ bỏ # được để để khẳng định dòng cuối cùng

+ trong DOS thực hiện Ctr-z như là 1 trong những ký tự quan trọng để xác định xong xuôi file.

+ trong UNIX thực hiện Ctr-d như là 1 ký tự quan trọng đặc biệt để xác định hoàn thành file.

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

Đôi lúc không biết đúng đắn mất thời gian bao thọ đểđọc dữ liệu của một file tính từ thời điểm bắt đầu tiến trình đọc file đến khikết thúc các bước đọc file.

Có 2 phương pháp để xác định hoàn thành một file, khi đọc dữ liệufile văn bản, quá trình xử lý sẽ đọc từngkí từ một, lúc đó lập trình viên rất có thể đọc được kí tự đánh dấu chấm dứt file.

Các hằng số biểu tượng EOF được tư tưởng trongstdio.h có mức giá trị là -1. Khi thực hiện các hàm đọc dữ liệu file văn bản theocách thức gọi từng kí tự, thì quá trình đọc được thực hiện cho đến khi gặp mặt kí tựđánh dấu kết thúc file.

Vì sinh hoạt đây quá trình đọc được thực hiện cho tới khi gặpkí tự đánh dấu xong xuôi file nên những 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, vào trường hợpfgetc(fp) == EOF thì dứt quá trình hiểu file.

2.3. Các hàm fgetc cùng fgets

Sử dụng các hàm fgetc cùng fgets phục vụ cho quy trình đọcdữ liệu từ tệp tin văn bản.

Xem thêm: Dạy Bé Tập Viết Bảng Chữ Cái Tiếng Việt, Mẫu Chữ Nét Đứt

2.3.1 Hàm fgetc

Hàm fgetc() được áp dụng để hiểu một kí tự từ tài liệu từfile văn bản.

Cúpháp

intgetc(FILE *fp);

đọc một cam kết tự từ tệp văn phiên bản được xác định bởi con trỏFILE *fp. Fp là tham số bề ngoài có kiểu con trỏ. Fp là hiệu quả thực hiện tại củahàm fopen();

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

Vídụ

Sử dụng hàm getc đọc toàn thể ký từ bỏ được ghi trongfile.txt tương xứng với lấy một 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 để kiểm tra xong xuôi file (EOF) khi thựchiện gọi file. Kết quả thực hiện nay in ra được 2 xâu chứa chuỗi ký tự.

2.3.2 Hàm fgets

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

Cúpháp

char*fgets(char *str, int n, tệp tin *fp);

Môtả

str: con trỏ char thực chất là string, thực chất là mảng chars

n:số lượng character lớn số 1 khi tiến hành đọc, ỏ đây chính là kích độ lớn của mảngchar

fp:con trỏ tệp tin

Hàm sẽ thực hiện dừng gọi file văn bạn dạng khi một trongcác đk sau đó là đúng.

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

+ gặp gỡ một chiếc mới

+ Đọc khi gặp kí tự xong xuôi file.

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

Vídụ

Sử dụng hàm fgets nhằm đọc file “file.txt” sống ví dụ đượctrình bày tại hình 2.

Code minh họa

*

Hìnhsố 4: thực hiện hàm fgets

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

2.3.3Hàm fscanf

Hàm đọc quý giá từ tệp văn bản. Hàm này gọi là hàm hướngtrường tài 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 lúc đọc dữ liệu từ bàn phím, nếu gặp ký trường đoản cú trống thì lậptức nó coi như kí tự chia cách giữa các trường và hoàn thành việc đọc tài liệu đâylà vấn đề có sự khác biệt giữa hàm scanf cùng hàm gets.

Ví dụ Hàm scanf

*

Hìnhsố 5 : Hàm scanf

Trong lấy 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 đó có nghĩa là hàm scanf khigặp vết trống lập tức chấm dứt việc ghi thông tin.

Nếu cầm hàm scanf băng hàm gets thì câu chữ thôngtin sẽ tiến hành hiển thị đầy đủ

Code minh họa

*

Hìnhsố 6 : Hàm gets

Tương tự như fscanf được thực hiện để gọi file, khi gặpdấu trống thì hàm fscanf dẽ coi nó như dấu phân cách giữa các trường. Vị nó làhàm hướng trường dữ liệu do thế 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 phát âm file văn bản, để chắc chắn chúng ta sử dụnghàm rewind() để tùy chỉnh vị trí con 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 đó kết quả in ra chỉ với “Ngon”,

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