功能强大的读写数据文件类 ReadSaveFile1

// ---------------------------------------------- // 功能强大的读写数据文件类 ReadSaveFile1,可以将一个数据文件读进vetor二维数组 // ---------------------------------------------- #ifndef ReadSaveFile_H #define ReadSaveFile_H // -------------------- #include <iostream> #include <fstream> #include <vector> #include <string> #include <sstream> #include <iterator> using namespace std; // -------------------------------------------------- class ReadSaveFile { private: unsigned int Row_; unsigned int MinColumn_; unsigned int MaxColumn_; string FileName_; vector<vector<double> >Data; // --------------------------- public: // ---构造函数 ------------- ReadSaveFile() : Row_(0), MinColumn_(99999), MaxColumn_(0), FileName_("") { }; // --------------------------- static void StringToDoubleVector(string istr, vector<double> &od1v); // --------------------------- // ----设置文件名----------------------------------- void SetFileName(string FileName) { FileName_ = FileName; }; // ---- void SetFileName(char FileName[]) { FileName_ = FileName; }; // -读取文件中的数据--------------------- void LoadDataFromFile(); // --保存数据--每个数据占15位----- void SaveDataToFile(string FileName = "Data.txt", string Headstr = ""); void SaveDataToFile(char FileName[] = "Data.txt", string Headstr = "") { FileName_ = FileName; SaveDataToFile(FileName_, Headstr); }; // ----提取数据----------------------------------- vector<vector<double> >GetData() { return Data; }; // ----提取数据----------------------------------- void GetData(vector<vector<double> >&FileData) { FileData.assign(Data.begin(), Data.end()); }; // ----设置数据----------------------------------- void SetData(vector<vector<double> >&FileData); // -------------------------------------- unsigned int GetRow() { return Row_; }; // -------------------------------------- unsigned int GetMinColumn() { return MinColumn_; }; // -------------------------------------- unsigned int GetMaxColumn() { return MaxColumn_; }; // --------------------------------------- string GetFileFirstLine(); // -------------------------------------- void PrintData(char Headstr[] = "File Data :"); // -------------默认destructor函数 ------------- ~ReadSaveFile() { }; // ----------- }; // ============================================================================== // StringToDoubleVector // ============================================================================== void ReadSaveFile::StringToDoubleVector(string istr, vector<double> &od1v) { if (od1v.size() > 0) { od1v.clear(); } // 将不要的字符的字符全部换成空格, string delimit = " "; for (string::size_type i = 0; i < istr.length(); i++) { int si = char(istr[i]); if (si < 43 || si > 57 || si == 44 || si == 47) { if (si != 101 && si != 69) { // 不是e或者E的字符都用空格代替 istr.erase(i, 1); istr.insert(i, delimit); } } } // -------分割字符串 vector<string>vs; for (string::size_type i = 0; i < istr.length(); i++) { if (istr[i] == delimit[0]) { string cstr = istr.substr(0, i); vs.push_back(cstr); // cout << "<" << istr.substr(0, i) << ">"; istr.erase(0, i); i = 0; } } // cout << endl; vs.push_back(istr); // -----------字符转为double类型的数 for (unsigned i = 0; i < vs.size(); i++) { istr = vs[i]; istringstream istr_stream(istr); double num; while (istr_stream >> num) { od1v.push_back(num); } } }; // ============================================================================== // LoadDataFromFile // ============================================================================== void ReadSaveFile::LoadDataFromFile() { Row_ = 0; MinColumn_ = 99999; MaxColumn_ = 0; if (Data.size() > 0) { Data.clear(); } ifstream fin(FileName_.c_str()); if (!fin.bad()) { string s; while (getline(fin, s)) { vector<double>tempdv; StringToDoubleVector(s, tempdv); if (tempdv.size() > 0) { Data.push_back(tempdv); Row_++; if (tempdv.size() < MinColumn_) { MinColumn_ = tempdv.size(); // 获取最小行 } if (tempdv.size() > MaxColumn_) { MaxColumn_ = tempdv.size(); // 获取最大行 } } } } fin.close(); } // ============================================================================== // SetData // ============================================================================== void ReadSaveFile::SetData(vector<vector<double> >&FileData) { Data.assign(FileData.begin(), FileData.end()); Row_ = Data.size(); MinColumn_ = 99999; MaxColumn_ = 0; for (unsigned i = 0; i < Data.size(); i++) { if (Data[i].size() < MinColumn_) { MinColumn_ = Data[i].size(); // 获取最小行 } if (Data[i].size() > MaxColumn_) { MaxColumn_ = Data[i].size(); // 获取最大行 } } }; // ============================================================================== // SaveDataToFile // ============================================================================== void ReadSaveFile::SaveDataToFile(string FileName, string Headstr) { FileName_ = FileName; if (Data.size() > 0) { vector<string>strv; char buffer[256]; for (unsigned i = 0; i < Data.size(); i++) { string cstr = ""; for (unsigned j = 0; j < Data[i].size(); j++) { char buffer[256]; sprintf(buffer, "%10.5g", Data[i][j]); cstr = cstr + " " + buffer; } strv.push_back(cstr); } ofstream ofs(FileName.c_str()); if (!ofs.bad()) { if (Headstr.length() > 1) { ofs << Headstr << endl; } copy(strv.begin(), strv.end(), ostream_iterator<string>(ofs, "\n")); } ofs.close(); } } // // 获取文件的第一行作为文件头 // string ReadSaveFile::GetFileFirstLine() { string Headstr = ""; ifstream fin(FileName_.c_str()); if (!fin.bad()) { getline(fin, Headstr); } fin.close(); return Headstr; } // // --打印的模版函数PrintData // void ReadSaveFile::PrintData(char Headstr[]) { cout << "=====================================================" << endl; cout << Headstr << endl; for (unsigned i = 0; i < Data.size(); i++) { cout << "Row[" << i << "]=\t"; vector<double>v = Data[i]; copy(v.begin(), v.end(), ostream_iterator<double>(cout, "\t")); cout << endl; } } // -------------------------------------------------------------------------------- #endif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值