Thứ Hai, 11 tháng 1, 2021

Lập trình C++ Basic | #13. Đọc ghi File trong C++

   CHƯƠNG 3: LẬP TRÌNH CẤU TRÚC TRONG C++

 Do your c, c plus plus or c sharp assignments by Rajarjs


Môi trường và thư viện fstream

Các đối tượng, phương thức dùng trong bài này được viết và thực thi tốt với Visual Studio, các thư viện C++ bao gồm fstreamiostream và string.

Để thao tác với file trong C++ có thể dùng ifstream cho việc đọc file, ofstream cho việc ghi file hoặc fstream cho cả 2 mục đích, trong trường hợp bài viết này dùng fstream.

Đọc dữ liệu từ file

Tạo file input.txt với nội dung như sau:

C++ la ngon ngu lap trinh co the tao ra hieu suat cao cho chuong trinh nhung do phuc tap trong lap trinh cao.

Chương trình đọc dữ liệu trong file input.txt và thể hiện ra màn hình:

#include <iostream>
#include <string>
#include <fstream>  // (1)

using namespace std;

int main()
{
	fstream f;                    // (2)
	f.open("input.txt", ios::in); // (2)

	string data;                  // (3)
	getline(f, data);             // (3)

	f.close();                    // (4)

	cout << data;
}

Như code trên cần thực hiện các bước:

  • Mở file bằng f.open.
  • Đọc dữ liệu từ file vào data thông qua getline.
  • Đóng file bằng f.close sau khi lấy dữ liệu xong.

Tóm tắt các bước đọc file với fstream

  1. Chèn thư viện cần thiết để xử lý file vào code (1).
  2. Mở file (2) với input.txt là tên file cần đọc, ios::in với mục đích mở file là đọc file.
    • Lưu ý có mở file thì phải có đóng file (4).
  3. Sau khi mở file, tiến hành đọc dữ liệu từ file vào string data (3).
    • Lưu ý sẽ có nhiều vấn đề nảy sinh ở đây, getline chỉ lấy 1 dòng trên file, nếu file có nhiều dòng, đọc thêm phần dưới của bài.
  4. Đóng file (4) sau khi đã đọc xong dữ liệu.

Đọc file input.txt có nhiều dòng

Tạo file input.txt với nội dung như sau:

DANH SACH MANG XA HOI:
Mang xa hoi Facebook ket noi moi nguoi.
Mang xa hoi Youtube chia se Video clip.
Mang xa hoi Tiktok cho gioi tre.

Chương trình đọc dữ liệu trong file input.txt với nhiều dòng và thể hiện ra màn hình:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	fstream f;
	f.open("input.txt", ios::in);

	string data;

	string line;
	while (!f.eof())          // (1)
	{
		getline(f, line); // (2)
		data += line;
	}

	f.close();

	cout << data;
}
  • (1) f.eof() kiểm tra xem đã kết thúc file chưa?
  • (2) nếu chưa, tiếp tục lấy dữ liệu (dòng kế tiếp) từ file vào line.

Ghi dữ liệu vào file

#include <iostream>
#include <string>
#include <fstream> // (1)

using namespace std;

int main()
{
	fstream f;                      // (2)
	f.open("output.txt", ios::out); // (2)

	string data = "Board: Modern C++\n"
	              "Website: www.stdio.vn/modern-cpp\n"
	              "Mo ta: Lap trinh C++"; // (3)
	f << data;                            // (3)

	f.close(); // (4)

	return 0;
}

Tóm tắt các bước ghi file với fstream

  1. Chèn thư viện cần thiết để xử lý file vào code (1).
  2. Mở file (2) với input.txt là tên file cần đọc, ios::out với mục đích mở file là ghi file.
    • Lưu ý có mở file thì phải có đóng file (4).
  3. Sau khi mở file, tiến hành ghi dữ liệu từ biến string data  vào file (3).
  4. Đóng file (4) sau khi đã ghi xong dữ liệu vào file.
  5. – Trong trường file tồn tại và muốn ghi tiếp nối dung vào nội dung đã có.
    – Ta sử dụng thêm ios::app sau ios::out
    – dataFile.open(“demo.txt”, ios::out | ios::app);

Một số vấn đề cần lưu ý

File được lưu ở đâu?

Với đường dẫn tuyệt đối

Có thể đặt file hoặc tìm file tại đường dẫn tuyệt đối đó. Ví dụ file được lưu tại D://data/input.txt. thì đường dẫn truyền vào hàm f.open là D://data/input.txt.

f.open("D://data/input.txt, ios::in);

Với đường dẫn tương đối

Nếu thực thi chương trình thông qua Visual Studio, đường dẫn tương đối tính từ thư mục chứa project (*.vcxproj), hoặc Working Directory tùy chỉnh. Do đó nếu đặt file chung thư mục chứa file *.vcxproj thì có thể sử dụng đường dẫn tương đối la "input.txt" hoặc "./input.txt".

 f.open("input.txt, ios::in);

Nếu thực thi chương trình bằng cách tự gọi thực thi chương trình .exe (click chuột hoặc enter) thì đường dẫn tương đối tính từ thư mục chứa file .exe.

* Trường hợp người mới học lập trình không nên tìm hiểu sâu vào lúc này.

Có thể dùng kiểu char, short, int, float, double thay vì string?

Có thể thay thế các kiểu dữ liệu cần thiết để đọc ghi thay vì chỉ dùng string. Ví dụ trong trường hợp ghi vào file 1 giá trị kiểu int.

int data = 6; // Thay vi string data = "chuoi du lieu"
f << data;

Không có nhận xét nào:

Đăng nhận xét

Bài tập chuỗi trong C++

  Bài tập chuỗi trong C++   (7) 668 lượt xem Chuỗi (String) trong C/C++ là một mảng ký tự được kết thúc bởi \0 (ký tự null). Dưới đây là các...