C ++ how to build a 2D matrix of strings from a .dat file? 5 columns x rows

I need to read a .dat file that looks like this:

Atask1 Atask2 Atask3 Atask4 Atask5 Btask1 Btask2 Btask3 Btask4 Btask5 Ctask1 Ctask2 Ctask3 Ctask4 Ctask5 Dtask1 Dtask2 Dtask3 Dtask4 Dtask5 

and I should be able to display information as follows:

 cout << line(3) << endl; // required output shown below >>Ctask1 Ctask2 Ctask3 Ctask4 Ctask5 cout << line(2)(4) << endl; // required output shown below >>Btask4 

I do not know how to read 1 line and split it into an array of 5 different lines. I would like the entire .dat file to be converted to a vector or list or some matrix / array structure for easy reference

any simple code or solutions for this ??

PLEASE, HELP?!?!?!?: -)

EDIT:

 vector<string> dutyVec[5]; dut1.open(dutyFILE); if( !dut1.is_open() ){ cout << "Can't open file " << dutyFILE << endl; exit(1); } if(dut1.eof()){ cout << "Empty file - no duties" << endl; exit(1); } while ( !dut1.eof()){ int count = 0; getline(dut1, dutyVec[count]); count++; } 
+4
source share
1 answer

Your problem raises a number of problems, all of which I will try to answer in one go. So forgive the length of this post.

 #include <iostream> #include <sstream> #include <string> #include <vector> #include <fstream> int main(int argc, char argv[]){ std::vector <std::string> v;//just a temporary string vector to store each line std::ifstream ifile; ifile.open("C://sample.txt");//this is the location of your text file (windows) //check to see that the file was opened correctly if(ifile.is_open()) { //while the end of file character has not been read, do the following: while(!ifile.eof()) { std::string temp;//just a temporary string getline(ifile, temp);//this gets all the text up to the newline character v.push_back(temp);//add the line to the temporary string vector } ifile.close();//close the file } //this is the vector that will contain all the tokens that //can be accessed via tokens[line-number][[position-number] std::vector < std::vector<std::string> > tokens(v.size());//initialize it to be the size of the temporary string vector //iterate over the tokens vector and fill it with data for (int i=0; i<v.size(); i++) { //tokenize the string here: //by using an input stringstream //see here: http://stackoverflow.com/questions/5167625/splitting-ac-stdstring-using-tokens-eg std::istringstream f(v[i].c_str()); std::string temp; while(std::getline(f, temp, ' ')) { tokens[i].push_back(temp);//now tokens is completely filled with all the information from the file } } //at this point, the tokens vector has been filled with the information //now you can actually use it like you wanted: //tokens[line-number][[position-number] //let test it below: //let see that the information is correct for (int i=0; i<tokens.size(); i++) { for(int j=0; j<tokens[i].size(); j++) { std::cout << tokens[i][j] << ' '; } std::cout << std::endl; } system("pause");//only true if you use windows. (shudder) return 0; } 

Note that I did not use iterators, which would be useful here. But, something that I think you can try for yourself.

+4
source

Source: https://habr.com/ru/post/1438778/


All Articles