c++ how to build a 2D matrix of strings from a .dat file? 5 columns x rows
我需要读一个.dat文件,它看起来像这样:
1 2 3 4 | Atask1 Atask2 Atask3 Atask4 Atask5 Btask1 Btask2 Btask3 Btask4 Btask5 Ctask1 Ctask2 Ctask3 Ctask4 Ctask5 Dtask1 Dtask2 Dtask3 Dtask4 Dtask5 |
我需要能够输出这样的信息:
1 2 3 4 5 | cout << line(3) << endl; // required output shown below >>Ctask1 Ctask2 Ctask3 Ctask4 Ctask5 cout << line(2)(4) << endl; // required output shown below >>Btask4 |
我不知道如何读取1行并将其拆分为5个不同字符串的数组。理想情况下,我希望将整个.dat文件转换为矢量、列表或某种矩阵/数组结构,以便于参考。
有没有简单的代码或解决方案??
请帮忙??????????-)
编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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++; } |
你的问题解决了许多问题,我将尝试一次性回答所有这些问题。所以,请原谅这篇文章的长度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #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-a-c-stdstring-using-tokens-e-g 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's test it below: //let's 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; } |
注意,我没有使用迭代器,这在这里是有益的。但是,我认为你可以自己尝试。