How to read a file line by line into a vector in C++?

DWQA QuestionsCategory: C++How to read a file line by line into a vector in C++?
Editor Staff asked 2 months ago

How to read a file line by line into a vector in C++?

1 Answers
Editor Staff answered 2 months ago

Reading File line by line

First open the file i.e.

// Open the File

std::ifstream in(“file.txt”);

Now keep reading next line using getline() and push it in vector function until end of file i.e.

std::string str;

// Read the next line from File untill it reaches the end.

while (std::getline(in, str))

{

// Line contains string of length > 0 then save it in vector

if(str.size() > 0)

vecOfStrs.push_back(str);

}

Complete example is as follows:

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

 

/*

* It will iterate through all the lines in file and

* put them in given vector

*/

bool getFileContent(std::string fileName, std::vector<std::string> & vecOfStrs)

{

 

// Open the File

std::ifstream in(fileName.c_str());

 

// Check if object is valid

if(!in)

{

std::cerr << “Cannot open the File : “<<fileName<<std::endl;

return false;

}

 

std::string str;

// Read the next line from File untill it reaches the end.

while (std::getline(in, str))

{

// Line contains string of length > 0 then save it in vector

if(str.size() > 0)

vecOfStrs.push_back(str);

}

//Close The File

in.close();

return true;

}

 

 

int main()

{

std::vector<std::string> vecOfStr;

 

// Get the contents of file in a vector

bool result = getFileContent(“example.cpp”, vecOfStr);

 

if(result)

{

// Print the vector contents

for(std::string & line : vecOfStr)

std::cout<<line<<std::endl;

}

}

 

Reading file line by line and performing operations on each line

Many times we encounter scenarios where we need to read a file line by line and perform some operation on each line like,

  • Search something in each line.
  • Modify the content
  • Store the string to some container etc.

We can a make a generic function that will accept a callback or function pointer along with File name i.e.

/*

* It will iterate through all the lines in file and

* call the given callback on each line.

*/

bool iterateFile(std::string fileName, std::function<void (const std::string & )> callback)

It will read the file line by line and will call the given function on each line.
 
Checkout complete example as follows,

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

#include <functional>

 

/*

* It will iterate through all the lines in file and

* call the given callback on each line.

*/

bool iterateFile(std::string fileName, std::function<void (const std::string & )> callback)

{

 

// Open the File

std::ifstream in(fileName.c_str());

 

// Check if object is valid

if(!in)

{

std::cerr << “Cannot open the File : “<<fileName<<std::endl;

return false;

}

 

std::string str;

// Read the next line from File untill it reaches the end.

while (std::getline(in, str))

{

// Call the given callback

callback(str);

}

//Close The File

in.close();

return true;

}

 

 

int main()

{

std::vector<std::string> vecOfStr;

 

//Call given lambda function for each line in file

bool res = iterateFile(“example.cpp”, [&](const std::string & str){

// Add to vector

vecOfStr.push_back(str);

});

 

if(res)

{

for(std::string & line : vecOfStr)

std::cout<<line<<std::endl;

}

}