Đọc chuỗi từ file trong c

      86
Chào các bạn vẫn theo dõi và quan sát khóa đào tạo lập trình trực đường ngôn ngữ C++.

Bạn đang xem: Đọc chuỗi từ file trong c

Mình đã trình diễn mang đến các bạn một số làm việc cơ bạn dạng cùng với tệp tin khi áp dụng thư viện cstdio (trong ngôn ngữ thiết kế C), thực hiện thư viện này, họ đã áp dụng một con trỏ giao diện FILE có tác dụng cầu nối trung gian giữa lịch trình của bọn họ và file, hồ hết thao tác làm việc bên trên tệp tin đầy đủ bắt buộc thực hiện con trỏ kiểu dáng FILE này. Trong bài học kinh nghiệm này, những bạn sẽ thuộc bản thân đọc thêm một vài phương pháp để làm việc cùng với tệp tin bằng phương pháp thực hiện những stream cơ mà ngôn ngữ C++ cung cấp.

Nhỏng mình ra mắt sinh hoạt bài học trước, nhằm làm việc với file trong ngôn từ C++, chúng ta sử dụng những class như ifstream (tệp tin input), ofstream (file output), hoặc fstream (file input/output) và tài liệu sẽ tiến hành tương truyền một giải pháp tuần trường đoản cú qua các đối tượng người tiêu dùng của các stream này, để lấn sân vào tệp tin hoặc đi tự tệp tin ra công tác.

File input

Thứ nhất bạn thích trình làng mang lại chúng ta một số thao tác làm việc hiểu tài liệu từ bỏ file thực hiện class fstream mà ngữ điệu C++ hỗ trợ. Để sử dụng class này, họ nên include file fstream vào tệp tin chương trình:

#include Do class ifstream và ofstream phần nhiều được định nghĩa phía bên trong file fstream, cần bọn họ chỉ cần include thư viện fstream là hoàn toàn có thể sử dụng cả nhị class này.

Bây giờ đồng hồ chúng ta thuộc sinh sản một đối tượng người tiêu dùng tệp tin input đầu vào trực thuộc kiểu ifstream:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");File nhưng bạn muốn đọc có tên là my_document.txt vào thư mục Desktop bên trên laptop của chính mình. Class ifstream có khá nhiều cách thức khởi tạo ra khác nhau, mà lại đơn giản tốt nhất là chúng ta truyền vào một trong những string là băng thông chính xác của file chúng ta phải hiểu dữ liệu. Nếu file đó phía bên trong thư mục cơ mà chương trình được build ra thì bạn cũng có thể thực hiện băng thông tương đối.

Bây tiếng mình vẫn kiểm soát xem đối tượng người tiêu dùng fileInput của bản thân mình sẽ links được mang đến file yêu cầu mnghỉ ngơi hay không bằng phương pháp sau:

if (fileInput.fail())std::cout << "Failed khổng lồ open this file!" << std::endl;Pmùi hương thức fail đã trả về false giả dụ đối tượng người sử dụng của ifstream ko link mang lại tệp tin được. Và đúng là nó đã không liên kết được với tệp tin.

*

Đó là do vào tlỗi mục Desktop của chính mình chưa xuất hiện file my_document.txt làm sao cả. Bây giờ đồng hồ mình tạo nên một tệp tin my_document.txt chưa tồn tại tài liệu trong tlỗi mục Desktop, chương trình không hề thông tin lỗi gì nữa.

Nlỗi các bạn thấy, họ áp dụng các phương thức được tư tưởng vào class ifstream, bắt buộc chúng ta chỉ cần sử dụng member selection operator (.) nhằm Gọi các phương thức sẽ quan niệm sẵn.

Xem thêm: Mẫu Đơn Xin Nhận Thầu Ao Hồ, Mẫu Đơn Xin Dự Thầu Công Trình Xây Dựng

Một điều chúng ta phải lưu ý Lúc làm việc phát âm ghi tệp tin với ngữ điệu C là bọn họ luôn luôn đề nghị hotline hàm đóng file fcthua thảm ngay lúc không hề sử dụng đến file nữa. Đối cùng với các stream cách xử lý tệp tin vào C++ thì dễ dàng hơn, Lúc thoát ra khỏi phạm vi kân hận lệnh, destructor đã từ bỏ call phương thức cthua thảm với tệp tin stream đang tự động hóa đóng góp lại.

Do kia, những chúng ta cũng có thể cách xử lý như sau (hoặc không quan trọng cũng được):

std::ifstream input("C:/Users/ADMIN/Desktop/my_document.txt");if (input đầu vào.fail())std::cout << "Failed khổng lồ open this file!" << std::endl;return -1;//read or write data in heređầu vào.close(); //we can forget this lineBây tiếng cho phần xử lý gọi dữ liệu từ bỏ file, dữ liệu từ tệp tin đang truyền qua stream vào những biến hóa vào lịch trình. Nhưng trước hết, mình yêu cầu thêm một trong những dữ liệu vào file my_document.txt trước. Nội dung của file my_document.txt như sau:

1 2 3 4 5Mình sẽ sở hữu chương trình đọc tài liệu từ tệp tin thông qua đối tượng người tiêu dùng fileInput cùng in ra screen nhỏng sau:

#include #include int main()std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");if (fileInput.fail())std::cout << "Failed lớn open this file!" << std::endl;return -1;while (!fileInput.eof())int n;fileInput >> n;std::cout << n << " ";std::cout << std::endl;fileInput.close();return 0;Mình sẽ thực hiện extraction operator (>>) để đưa tài liệu tự file vào lưu trong đổi thay n và kế tiếp in ra màn hình hiển thị trải qua đối tượng người sử dụng std::cout. thuở đầu, chúng ta nhập tài liệu từ bỏ keyboard, dữ liệu đó sẽ tiến hành lưu lại tạm thời vào stdin chỗ nào kia vào máy tính, cùng sử dụng đối tượng người sử dụng cin để lấy dữ liệu vào đổi mới. Bây giờ đồng hồ, tài liệu đã tất cả sẵn vào file, bọn họ chỉ cần tạo một đối tượng người tiêu dùng trực thuộc giao diện ifstream cùng links đến tệp tin, sau đó thực hiện toán tử (>>) để lấy tài liệu vào trở nên. Cách vận động trọn vẹn tương tự nhau đề xuất ko các bạn?

Tuy nhiên, chúng ta nên biết rõ cấu trúc tổ chức triển khai dữ liệu phía bên trong tệp tin là ra sao nhằm rời các ngôi trường phù hợp ngoại lệ xảy ra. lấy một ví dụ mình không thay đổi cấu trúc chương trình như bên trên và sửa lại file my_document.txt gồm nội dung như sau:

1 2 3 4 5 a b c

Thử chạy lại lịch trình bên trên, lịch trình đã lâm vào tình thế tình trạng lặp vô hạn. Đó là do mẫu mã tài liệu cơ mà chúng ta lựa chọn để giữ giá trị đọc từ bỏ tệp tin là số nguyên ổn, tuy vậy trong tệp tin lại xuất hiện các kí từ bỏ. Do đó, lúc đọc không còn số ngulặng trong file, những kí từ cấp thiết gửi vào trở thành n được bởi vì lỗi format, vòng lặp while chẳng thể dứt vì chưng họ đặt điều kiện là hiểu cho tới lúc chấm dứt tệp tin.

Để khắc chế chứng trạng này, họ buộc phải bình chọn dữ liệu hiểu từ tệp tin chuyển vào chương trình gồm đúng format hay không, bạn có thể làm cho như sau:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");if (fileInput.fail())std::cout << "Failed to open this file!" << std::endl;while (!fileInput.eof())int n;if (fileInput >> n)std::cout << n << " ";elsereturn -2;std::cout << std::endl;fileInput.close();system("pause");return 0;Nhấn F5 để chạy chương trình dưới chế độ Debug, họ vẫn thấy lịch trình tạm dừng khi gọi dứt giá trị 5 và trả về cực hiếm -2 mang lại hệ quản lý và điều hành. Mình sẽ thực hiện if statement nhằm đánh giá coi extraction operator đã có được triển khai đúng hay là không.

Nếu họ vẫn mong phát âm toàn bộ dữ liệu trong file với in ra screen, chúng ta cũng có thể hiểu từng kí từ bỏ vào tệp tin vào biến hóa dạng hình char, vậy vị đẳng cấp số nguyên:

while (!fileInput.eof())char c;if(fileInput >> c)std::cout << c << " ";std::cout << std::endl;Tiếp theo, bọn họ cùng thử phát âm từng chiếc tài liệu trong tệp tin vào những đối tượng người sử dụng std::string với in họ màn hình. Mình thay đổi câu chữ file my_document.txt thành nhỏng sau:

This is line 1This is line 2This is line 3This is line 4This is line 5Dưới đây là một bí quyết giải pháp xử lý để đọc từng dòng dữ liệu cùng in ra màn hình:

while (!fileInput.eof())char temp<255>;fileInput.getline(temp, 255);std::string line = temp;std::cout << line << std::endl;Mình sẽ áp dụng cách làm getline có sẵn vào class ifstream để hiểu dữ liệu tự file và chuyển vào một C-style string tất cả size cố định đến trước, kế tiếp dùng C-style string kia chuyển vào đối tượng người tiêu dùng của std::string nhằm bớt form size bộ nhớ dư vượt.

Nếu thực hiện extraction operator (>>) nhằm phát âm tài liệu và std::string trực tiếp, bọn họ đang gặp gỡ bắt buộc trường vừa lòng kí trường đoản cú khoảng tầm white không hiểu được nlỗi lúc thực hiện đối tượng người dùng std::cin.

Ngoài một số trong những phương pháp đọc dữ liệu từ tệp tin trải qua đối tượng người tiêu dùng của class ifstream cơ mà bản thân nói bên trên, bọn họ còn tương đối nhiều phương pháp khác, với không hề ít cách tiến hành không giống nhưng class ifstream vẫn hổ trợ. Việc chọn lựa cách nào để đọc dữ liệu còn phụ thuộc vào kết cấu dữ liệu được tổ chức phía bên trong file thế nào.

Các chúng ta cũng có thể tìm hiểu thêm về thư viện ifstream tại đường dẫn sau:

http://www.cplusplus.com/reference/fstream/ifstream/

File input modes

Cũng tương tự như nlỗi thao tác làm việc mlàm việc liên kết đến tệp tin ngơi nghỉ vào ngữ điệu C, tệp tin input stream vào C++ cũng chất nhận được chúng ta chọn phong cách để mở tệp tin. Dưới đấy là một vài mode có thể dùng được cho file input stream:

*

Nếu bọn họ tạo ra link mang đến file thông qua đối tượng người sử dụng của class ifstream, mode std::ios::in được áp dụng khoác định. Tuy nhiên, khi áp dụng file input/output stream cùng với class fstream thì họ buộc phải lựa chọn mode mang lại đối tượng người sử dụng, ví dụ:

std::fstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt", std::ios::in);if (fileInput.fail())std::cout << "Failed khổng lồ open this file!" << std::endl;while (!fileInput.eof())char temp<255>;fileInput.getline(temp, 255);std::string line = temp;std::cout << line << std::endl;std::cout << std::endl;fileInput.close();Trong khi, họ cũng có thể msinh sống file bên dưới dạng nhị phân:

std::fstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt", std::ios::in | std::ios::binary);Đọc dữ liệu dưới dạng nhị phân hoàn toàn có thể được vận dụng cho tất cả file nhị phân hoặc tệp tin văn bản.

Sử dụng một input đầu vào stream mang đến nhiều file

Cũng như việc họ chế tạo liên kết tới file với cùng một đường truyền ví dụ và áp dụng cách làm cthua trận nhằm đóng góp stream, chúng ta cũng rất có thể áp dụng cách thức open để chế tạo một stream new mang lại một đường dẫn không giống. Ví dụ:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");//..............fileInput.close();fileInput.open(""C:/Users/ADMIN/Desktop/my_document2.txt"");//..............fileInput.close();Phương thức open chuyển động tựa như cách làm khởi chế tạo ra của class ifstream, đề xuất bạn có thể tạo liên kết các lần. Tuy nhiên, chúng ta chỉ có thể liên kết mang đến một tệp tin nhất tại 1 thời điểm. Và trước khi tạo nên link mang lại tệp tin khác, bọn họ nên đóng link trước đó.

Tổng kết

Thao tác gọi dữ liệu từ tệp tin trải qua những file đầu vào stream cơ mà C++ cung ứng khá dễ dàng và đơn giản so với thực hiện thỏng viện cstdio vào ngôn ngữ C. Các bạn cũng có thể tìm hiểu thêm nhiều cách thức phát âm dữ liệu trường đoản cú file khác qua topic dưới đây: