读取文本数据

来源:互联网 发布:编程打印16进制乘法表 编辑:程序博客网 时间:2024/05/14 06:36

输入文件:

1 2 3  4 5 6


输出到vector中


代码:

#include <iostream>#include <fstream>#include <sstream>#include <string>#include <vector>#include <cassert>using namespace std;template<typename DT>bool checkLineData(istringstream &instr, const int &nCol){int c = 0;DT tpVar;while(instr>>tpVar){c++;}instr.clear();instr.seekg(istringstream::beg);return (c==nCol);}template<typename DT>void dispData(vector<DT> &data, const int &nRow, const int &nCol){int index = 0;int r,c;int nColM1 = nCol-1;assert((int)(data.size())==(nRow*nCol));for (r = 0; r < nRow; r++){for (c = 0; c < nColM1; c++){cout << data[index] << "\t";index++;}cout << data[index];index++;cout << endl;}}template<typename DT>int readDataFromTXT(vector<DT> &data,int &nRow, int &nCol, const string &filename){ifstream infile; istringstream instr;string line; // the string to store one line.DT tpVar;int k;infile.open(filename.c_str(), ios_base::in);if (!infile.is_open()){cerr << "failed to open the file of " << filename << "." << endl;return -1;}// read the first line and check number of column.std::getline(infile, line);instr.str(line);nCol = 0;while(instr >> tpVar) {nCol++;}// read the remaining data and stored into a vector.infile.seekg(ifstream::beg);nRow = 0;while(!infile.eof()){std::getline(infile, line); // get one line.instr.clear(); // Clears the stream error state flags by assigning them the value of state.instr.str(line); // ready to read the data.if (checkLineData<DT>(instr, nCol)){for (k = 0; k < nCol; k++){instr >> tpVar;data.push_back(tpVar);}nRow++;}}infile.close();return 0;}int main(int argc, char **argv){if (argc != 2){cerr << "[ ERROR ] error using current application." << endl;cerr << "[ HELP  ] using it in the following way:" << endl;cerr << "[ HELP  ] ./main.exe filename.txt" << endl;return -1;}// inputestring filename = string(argv[1]); // outputvector<double> data;int nRow,nCol;// processingif (0!=readDataFromTXT<double>(data, nRow, nCol, filename))return -1;// displyingdispData<double>(data, nRow, nCol);cout << "number of rows   = " << nRow << endl;cout << "number of column = " << nCol << endl;return 0;}


0 0
原创粉丝点击