đọc chuỗi từ file trong c

Chào chúng ta vẫn theo dõi và quan sát khóa đào tạo và huấn luyện lập trình sẵn trực con đường ngữ điệu C++.

You watching: đọc chuỗi từ file trong c

Mình đã trình diễn mang đến các bạn một trong những thao tác cơ bản cùng với file Khi sử dụng thư viện cstdio (trong ngôn từ lập trình sẵn C), thực hiện thỏng viện này, họ đã sử dụng một con trỏ đẳng cấp FILE làm cho cầu nối trung gian giữa công tác của chúng ta và file, hầu như thao tác bên trên file các yêu cầu sử dụng nhỏ trỏ kiểu FILE này. Trong bài học này, các các bạn sẽ cùng mình bài viết liên quan một số trong những phương pháp để làm việc cùng với tệp tin bằng phương pháp sử dụng các stream nhưng mà ngôn ngữ C++ cung cấp.

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

File input

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

#include Do class ifstream với ofstream hầu như được khái niệm phía bên trong tệp tin fstream, đề nghị họ chỉ cần include thỏng viện fstream là hoàn toàn có thể sử dụng cả hai class này.

Bây giờ đồng hồ chúng ta thuộc chế tạo ra một đối tượng file input đầu vào ở trong thứ hạng ifstream:

std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");File mà lại mình thích hiểu có tên là my_document.txt trong thư mục Desktop bên trên máy tính xách tay của mình. Class ifstream có tương đối nhiều phương thức khởi sản xuất không giống nhau, nhưng mà đơn giản và dễ dàng độc nhất là họ truyền vào trong 1 string là đường dẫn đúng chuẩn của tệp tin họ nên phát âm tài liệu. Nếu file kia phía trong thư mục cơ mà công tác được build ra thì bạn cũng có thể áp dụng băng thông tương đối.

Bây tiếng bản thân sẽ bình chọn xem đối tượng người tiêu dùng fileInput của bản thân mình đang link được mang lại tệp tin bắt buộc msinh sống giỏi không bằng cách sau:

if (fileInput.fail())std::cout << "Failed to open this file!" << std::endl;Phương thức fail vẫn trả về false giả dụ đối tượng người sử dụng của ifstream ko links cho file được. Và chính xác là nó đã không liên kết được với tệp tin.

*

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

Nhỏng chúng ta thấy, bọn họ sử dụng những phương thức được tư tưởng vào class ifstream, đề xuất họ chỉ cần thực hiện member selection operator (.) nhằm điện thoại tư vấn những cách thức đang có mang sẵn.

See more: 7 Cách Tải Ứng Dụng Cho Sony Internet Tv, Ứng Dụng Bravia Tv

Một điều chúng ta bắt buộc xem xét Khi thao tác làm việc phát âm ghi file cùng với ngôn từ C là bọn họ luôn phải Điện thoại tư vấn hàm đóng góp file fcthua kém ngay khi không còn sử dụng mang lại file nữa. Đối cùng với các stream cách xử trí file trong C++ thì đơn giản và dễ dàng rộng, lúc thoát ra khỏi phạm vi kăn năn lệnh, destructor vẫn từ bỏ call cách thức cđại bại và tệp tin stream đã tự động hóa đóng lại.

Do đó, các bạn cũng có thể giải pháp xử lý nlỗi sau (hoặc ko cần thiết cũng được):

std::ifstream input("C:/Users/ADMIN/Desktop/my_document.txt");if (input đầu vào.fail())std::cout << "Failed to lớn open this file!" << std::endl;return -1;//read or write data in hereinput đầu vào.close(); //we can forget this lineBây tiếng đến phần xử lý phát âm tài liệu từ bỏ file, dữ liệu trường đoản cú tệp tin vẫn truyền qua stream vào các trở thành vào công tác. Nhưng thứ nhất, mình đề nghị thêm một số trong những dữ liệu vào file my_document.txt trước. Nội dung của file my_document.txt nhỏng sau:

1 2 3 4 5Mình sẽ sở hữu công tác phát âm dữ liệu từ tệp tin trải qua đối tượng người tiêu dùng fileInput với in ra screen như sau:

#include #include int main()std::ifstream fileInput("C:/Users/ADMIN/Desktop/my_document.txt");if (fileInput.fail())std::cout << "Failed khổng lồ 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 vẫn sử dụng extraction operator (>>) để lấy dữ liệu tự file vào lưu trong thay đổi n và sau đó in ra màn hình trải qua đối tượng người tiêu dùng std::cout. Lúc trước, các bạn nhập tài liệu trường đoản cú bàn phím, tài liệu kia sẽ tiến hành giữ trong thời điểm tạm thời vào stdin ở chỗ nào đó trong máy tính, cùng sử dụng đối tượng người sử dụng cin để mang tài liệu vào đổi mới. Bây giờ, dữ liệu đang có sẵn trong tệp tin, chúng ta chỉ việc tạo nên một đối tượng người dùng ở trong mẫu mã ifstream và links cho file, sau đó sử dụng tân oán tử (>>) để mang tài liệu vào biến hóa. Cách vận động hoàn toàn tương tự nhau nên ko các bạn?

Tuy nhiên, họ cần phải biết rõ cấu trúc tổ chức tài liệu bên trong tệp tin là ra làm sao nhằm tách những trường phù hợp nước ngoài lệ xảy ra. lấy ví dụ như bản thân không thay đổi kết cấu chương trình nhỏng bên trên với sửa lại file my_document.txt có câu chữ nlỗi sau:

1 2 3 4 5 a b c

Thử chạy lại chương trình trên, công tác sẽ lâm vào tình thế tình trạng lặp vô hạn. Đó là do hình trạng tài liệu nhưng mà chúng ta chọn nhằm giữ giá trị phát âm từ file là số nguyên ổn, dẫu vậy vào file lại xuất hiện những kí từ bỏ. Do kia, Khi hiểu không còn số nguim trong tệp tin, các kí trường đoản cú quan yếu gửi vào vươn lên là n được do lỗi format, vòng lặp while thiết yếu xong vày chúng ta đặt điều kiện là đọc cho đến Lúc kết thúc tệp tin.

Để hạn chế chứng trạng này, họ yêu cầu đánh giá tài liệu đọc trường đoản cú tệp tin chuyển vào lịch trình tất cả đúng format hay không, chúng ta cũng có thể làm 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 nhằm chạy lịch trình bên dưới chính sách Debug, bọn họ sẽ thấy lịch trình dừng lại khi đọc hoàn thành quý giá 5 cùng trả về giá trị -2 cho hệ điều hành và quản lý. Mình đang thực hiện if statement để kiểm tra coi extraction operator dành được triển khai đúng hay là không.

Nếu chúng ta vẫn hy vọng đọc toàn thể tài liệu trong tệp tin và in ra màn hình hiển thị, chúng ta cũng có thể đọc từng kí từ bỏ vào tệp tin vào biến vẻ bên ngoài char, vắt vì kiểu dáng số nguyên:

while (!fileInput.eof())char c;if(fileInput >> c)std::cout << c << " ";std::cout << std::endl;Tiếp theo, bọn họ thuộc thử đọc từng loại dữ liệu trong file vào những đối tượng người tiêu dùng std::string với in bọn họ screen. Mình biến đổi nội dung tệp tin my_document.txt thành nlỗi sau:

This is line 1This is line 2This is line 3This is line 4This is line 5Dưới đấy là một phương pháp xử trí để hiểu từng chiếc tài liệu với 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 thủ tục getline gồm sẵn trong class ifstream để phát âm dữ liệu tự file cùng gửi vào một trong những C-style string bao gồm kích cỡ thắt chặt và cố định mang đến trước, tiếp nối cần sử dụng C-style string đó chuyển vào đối tượng người dùng của std::string để sút kích thước bộ lưu trữ dư vượt.

Nếu sử dụng extraction operator (>>) nhằm gọi tài liệu với std::string trực tiếp, chúng ta đang chạm mặt đề nghị trường hợp kí trường đoản cú khoảng tầm Trắng ko hiểu được nlỗi khi sử dụng đối tượng std::cin.

Ngoài một vài phương pháp hiểu dữ liệu từ tệp tin thông qua đối tượng người dùng của class ifstream mà lại mình nói bên trên, chúng ta còn tương đối nhiều phương pháp khác, với tương đối nhiều cách làm khác mà lại class ifstream đã hổ trợ. Việc chọn cách như thế nào nhằm gọi dữ liệu còn phụ thuộc vào vào cấu tạo dữ liệu được tổ chức triển khai bên trong file ra làm sao.

Các bạn có thể đọc thêm về thư viện ifstream trên băng thông sau:

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

File đầu vào modes

Cũng tương tự như nlỗi thao tác msinh hoạt links mang lại tệp tin sinh sống vào ngôn từ C, file đầu vào stream vào C++ cũng cho phép chúng ta chọn thứ hạng nhằm msinh hoạt tệp tin. Dưới đây là một trong những mode có thể cần sử dụng được cho tệp tin đầu vào stream:

*

Nếu chúng ta chế tác links mang lại file thông qua đối tượng của class ifstream, mode std::ios::in được thực hiện mang định. Tuy nhiên, lúc thực hiện file input/output stream cùng với class fstream thì bọn họ đề nghị chọn mode mang lại đối tượ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();Ngoài ra, bọn họ cũng hoàn toàn có thể msinh sống tệp tin dưới dạng nhị phân:

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

See more: Cách Kiểm Tra Mã Vạch Hàng Thật Giả Bằng Mã Vạch Bao Bì, Hàng Giả Có Check Mã Vạch Được Không

Sử dụng một đầu vào stream mang lại những file

Cũng như Việc bọn họ chế tạo link tới file với cùng 1 băng thông cụ thể và áp dụng phương thức close nhằm đóng stream, chúng ta cũng rất có thể áp dụng cách thức open nhằm chế tác một stream mới cho một băng thông khác. 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ơm thức open chuyển động tương tự cách làm khởi sinh sản của class ifstream, đề xuất chúng ta cũng có thể tạo liên kết nhiều lần. Tuy nhiên, bọn họ chỉ có thể kết nối đến một file nhất trên một thời điểm. Và trước lúc chế tác links mang lại tệp tin không giống, họ phải đóng góp liên kết trước kia.

Tổng kết

Thao tác phát âm dữ liệu từ bỏ tệp tin thông qua các tệp tin input stream mà C++ hỗ trợ tương đối đơn giản dễ dàng đối với thực hiện thư viện cstdio vào ngôn từ C. Các bạn có thể tham khảo thêm nhiều phương pháp đọc dữ liệu từ bỏ tệp tin khác qua topic bên dưới đây: