Cho file inp có bao nhiêu chuỗi chứa từ

Trong bài viết này mình xin được trình bày với các bạn cách nhập xuất file rất cơ bản khi làm việc với file trong C++

Khi sử dụng file ta cần phải khai báo thư viện fstream với cú pháp: `

include `

Khi xử lí file trong C++ ta có 3 class là:

  • ifstream là class để đọc dữ liệu đầu vào từ file
    • Ví dụ khai báo một biến kiểu ifstream để đọc dữ liệu từ một file có tên là input.txt: ifstream ip("input.txt");
  • ofstream là class để ghi dữ liệu vào (o viết tắt của out, f viết tắt của file)
    • Ví dụ khai báo một biến ofstream để mở file: ofstream op;
  • fstream là class để đọc hoặc ghi dữ liệu
    • Ta có thể thay thế 2 từ khóa trên bằng từ khóa fstream

Đọc ghi file thường có các chế độ (mode) định dạng đi kèm như sau:

ios::in dùng để Mở cho các hoạt động đầu vào. (mode mặc định của ifstream)

ios::out dùng để mở cho các hoạt động đầu ra. (mode mặc định của ofstream)

ios::binary dùng để mở file nhị phân.

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

0 là đặt vị trí con trỏ ở cuối file khi chúng ta mở file.

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

1 là khi file đã có sẵn data thì dữ liệu sẽ được thêm vào cuối file.

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

2 là khi ta chèn dữ liệu vào file, thì csc dữ liệu cũ sẽ bị xóa hết.

Để ghi dữ liệu vào file ta dùng cú pháp:

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

3

Để đọc dữ liệu từ file ta dùng cú pháp:

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

4

Để mở file bất kì ta dùng hàm

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

5 (khi dùng devC mode có thể có hoặc không nhưng trong visual thì phải bắt buộc có)

Ví dụ nhập xuất file cơ bản:


# include 

# include 
using namespace std;
int main()
{
  ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
  fstream output;
  output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out );
  string str;
  input>>str; // lấy giá trị biến str từ file input
  cout<

Khi sử dụng file trong C++ ta cần lưu ý liên kết tới file ta

cần sử dụng ở đây bình thường ta copy link sẽ là

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

6 sẽ bị lỗi do \ là một kí tự đặc biệt và nó sẽ hiểu

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

7

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

8

  string line;
  while(!input.eof())  //khi chưa tới cuối file thì tiếp tục đọc
  {
    getline(input,line);
    output<

9


# include 

# include 
using namespace std;
int main()
{
  //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt
  ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
  fstream output; //tạo biến output để ghi dữ liệu vào file output.txt
  output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out);
  if(input.is_open() && output.is_open())
  {
    cout<<"Mo thanh cong!!"<

0


# include 

# include 
using namespace std;
int main()
{
  //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt
  ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
  fstream output; //tạo biến output để ghi dữ liệu vào file output.txt
  output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out);
  if(input.is_open() && output.is_open())
  {
    cout<<"Mo thanh cong!!"<

1 là một lệnh giống như


# include 

# include 
using namespace std;
int main()
{
  //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt
  ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
  fstream output; //tạo biến output để ghi dữ liệu vào file output.txt
  output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out);
  if(input.is_open() && output.is_open())
  {
    cout<<"Mo thanh cong!!"<

2 (trỏ xuống dòng) vì vậy để ta coi \ là

một char bình thường ta cần phải thêm \ trước \ tức là \\ như code mẫu trên.

Bình thường khi chúng ta lấy dữ liệu từ bàn phím ta sẽ sử dụng câu lệnh cin>> và in dữ liệu

ra màn hình console ta dùng cout<<, và tương tự với đọc dữ liệu từ file và ghi dữ liệu vào file ta chỉ cần thay cin thành tên file cần đọc dữ liệu, và thay cout thành tên file cần ghi dữ liệu vào.

Nếu chỉ dùng


# include 

# include 
using namespace std;
int main()
{
  //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt
  ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
  fstream output; //tạo biến output để ghi dữ liệu vào file output.txt
  output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out);
  if(input.is_open() && output.is_open())
  {
    cout<<"Mo thanh cong!!"<

3 thì ta chỉ đọc được chuỗi cho tới khi nó gặp dấu cách. Muốn lấy dữ liệu lấy được cả dấu cách ta dùng hàm


# include 

# include 
using namespace std;
int main()
{
  //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt
  ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt");
  fstream output; //tạo biến output để ghi dữ liệu vào file output.txt
  output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out);
  if(input.is_open() && output.is_open())
  {
    cout<<"Mo thanh cong!!"<

4

Một số hàm hỗ trợ hay gặp khi sử dụng file:

  1. `

include

include

using namespace std; int main() { //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt ifstream input("C:\Users\minhh\OneDrive\Desktop\input.txt"); fstream output; //tạo biến output để ghi dữ liệu vào file output.txt output.open("C:\Users\minhh\OneDrive\Desktop\output.txt", ios::out); if(input.is_open() && output.is_open()) {

cout<<"Mo thanh cong!!"<
} else {
cout<<"Mo that bai!!"<
}
    input.close(); // đóng file input  
    output.close(); // đóng file output  
return 0; }
5  
  • Hàm eof() trả về true khi con trỏ đã trỏ tới cuối file và với false thì ngược lại.
  • Khi một file có nhiều dòng dữ liệu ta phải đọc chúng như sau:
    • string line; while(!input.eof()) //khi chưa tới cuối file thì tiếp tục đọc { getline(input,line); output<
      1. `
# include # include using namespace std; int main() { //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt"); fstream output; //tạo biến output để ghi dữ liệu vào file output.txt output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out); if(input.is_open() && output.is_open()) { cout<<"Mo thanh cong!!"<
6

  • Hàm fail() trả về true nếu đọc học viết lên file bị lỗi hoặc khi ta đọc 1 số nguyên từ file nhưng dữ liệu được đọc là một string; trả về false khi không có lỗi phát sinh khi đọc viết file.
    1. `

include

include

using namespace std; int main() { //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt ifstream input("C:\Users\minhh\OneDrive\Desktop\input.txt"); fstream output; //tạo biến output để ghi dữ liệu vào file output.txt output.open("C:\Users\minhh\OneDrive\Desktop\output.txt", ios::out); if(input.is_open() && output.is_open()) {

cout<<"Mo thanh cong!!"<
} else {
cout<<"Mo that bai!!"<
}
    input.close(); // đóng file input  
    output.close(); // đóng file output  
return 0; }
7  
  • Để kiểm tra file đã được mở hay chưa ta dùng hàm is\_open() hàm này trả về true nếu mở thành công và false nếu thất bại. Ví dụ: # include # include using namespace std; int main() { //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt"); fstream output; //tạo biến output để ghi dữ liệu vào file output.txt output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out); if(input.is_open() && output.is_open()) { cout<<"Mo thanh cong!!"< Kết quả của ví dụ trên là: in ra "Mo thanh cong!!" ở màn hình console. Ta có hàm getline() để đọc dữ liệu nhận cả dấu cách. Vì vậy khi câu lệnh input>>line; được thay thế bằng getline(input,line); thì lúc này biến line = "Hello world" => file output.txt có dữ liệu là "Hello world".
    1. `
# include # include using namespace std; int main() { //tạo đối tượng input để đọc dữ liệu đầu vào từ file input.txt ifstream input("C:\\Users\\minhh\\OneDrive\\Desktop\\input.txt"); fstream output; //tạo biến output để ghi dữ liệu vào file output.txt output.open("C:\\Users\\minhh\\OneDrive\\Desktop\\output.txt", ios::out); if(input.is_open() && output.is_open()) { cout<<"Mo thanh cong!!"<
8

  • close() là hàm để đóng file, khi mỗi chương trình ta viết xong thì ta nên close file lại để thông báo cho hệ thống rằng tôi đã làm xong nhiệm vụ yêu cầu hệ thống xóa các bộ nhớ đệm liên quan rồi đóng file lại.

Tổng Kết

Như vậy mình đã sơ lược những thao tác rất cơ bản khi sử dụng file .txt đối với C++, và các bạn chỉ cần nhớ khi làm việc với file việc đọc dữ liệu là rất quan trọng các bạn nên thực hành nhiều để hiểu rõ hơn đặc biệt phần mode. Cảm ơn các bạn đã đọc hẹn gặp lại các bạn trong bài viết kế tiếp. Thank for All!