// ----------------------------------------------
// 功能强大的读写数据文件类 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
功能强大的读写数据文件类 ReadSaveFile1
读写数据文件利器
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Stable-Diffusion-3.5
图片生成
Stable-Diffusion
Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

被折叠的 条评论
为什么被折叠?



