31 #define arcs_assert(a) (assert(a))
34 #define EventLogVar(a)
53 template <CsvExpression E = CsvExpression::EXPONENTIAL,
size_t M>
54 static void SaveFile(
const std::array<double, M>& Data,
const std::string& FileName){
55 std::ofstream fout(FileName.c_str(), std::ios::out | std::ios::trunc);
57 SetExpression<E>(fout);
60 for(
size_t j = 0; j < M; ++j){
71 template <
typename T =
double,
size_t M>
72 static void LoadFile(std::array<T,M>& Data,
const std::string& FileName){
73 std::ifstream fin(FileName.c_str());
74 CheckError(fin, FileName);
77 std::string ReadBuff =
"";
79 while(getline(fin, ReadBuff)){
84 if constexpr(std::is_same_v<T,double>){
85 Data.at(j - 1) = std::stod(ReadBuff);
87 if constexpr(std::is_same_v<T,std::string>){
88 Data.at(j - 1) = ReadBuff;
102 template <CsvExpression E = CsvExpression::EXPONENTIAL,
size_t N,
size_t M>
103 static void SaveFile(
const std::array<std::array<double, N>, M>& Data,
const std::string& FileName,
size_t NN,
size_t MM){
104 std::ofstream fout(FileName.c_str(), std::ios::out | std::ios::trunc);
106 SetExpression<E>(fout);
109 for(
size_t j = 0; j < MM; ++j){
110 for(
size_t i = 0; i < NN; ++i){
111 fout << Data.at(j).at(i);
126 template <CsvExpression E = CsvExpression::EXPONENTIAL,
size_t N,
size_t M>
127 static void SaveFile(
const std::array<std::array<double, N>, M>& Data,
const std::string& FileName){
139 template <CsvExpression E = CsvExpression::EXPONENTIAL,
size_t N,
size_t M>
140 static void SaveFile(std::unique_ptr< std::array<std::array<double, N>, M> >&& Data,
const std::string& FileName,
size_t NN,
size_t MM){
141 std::ofstream fout(FileName.c_str(), std::ios::out | std::ios::trunc);
143 SetExpression<E>(fout);
146 for(
size_t j = 0; j < MM; ++j){
147 for(
size_t i = 0; i < NN; ++i){
148 fout << Data->at(j).at(i);
162 template <
size_t N,
size_t M>
163 static void LoadFile(std::array<std::array<double, N>, M>& Data,
const std::string& FileName){
164 std::ifstream fin(FileName.c_str());
165 CheckError(fin, FileName);
168 std::string ReadBuff =
"";
169 std::array<double, N> ValBuff;
171 while(getline(fin, ReadBuff)){
174 ParseCsvString(ReadBuff, ValBuff);
175 for(
size_t i = 0; i < N; ++i){
176 Data.at(j-1).at(i) = ValBuff.at(i);
187 template <CsvExpression E = CsvExpression::EXPONENTIAL,
size_t N,
size_t M>
189 std::ofstream fout(FileName.c_str(), std::ios::out | std::ios::trunc);
191 SetExpression<E>(fout);
194 for(
size_t j = 0; j < M; ++j){
195 for(
size_t i = 0; i < N; ++i){
210 template <
size_t N,
size_t M>
212 std::ifstream fin(FileName.c_str());
213 CheckError(fin, FileName);
216 std::string ReadBuff =
"";
217 std::array<double, N> ValBuff;
219 while(getline(fin, ReadBuff)){
222 ParseCsvString(ReadBuff, ValBuff);
223 setrow(Data, ValBuff, j);
236 static void CheckError(
const std::ofstream& fileout){
244 static void CheckError(
const std::ifstream& filein,
const std::string& filename){
245 EventLog(
"Checking CSV File Read Error of " + filename +
"...");
247 EventLog(
"Checking CSV File Read Error of " + filename +
"...Done");
253 template <CsvExpression E>
254 static void SetExpression(std::ofstream& fileout){
255 if constexpr(E == CsvExpression::NORMAL){
257 fileout.setf(std::ios::fixed);
259 if constexpr(E == CsvExpression::EXPONENTIAL){
261 fileout.setf(std::ios::scientific);
263 fileout.precision(14);
265 if constexpr(E == CsvExpression::HEXFLOAT){
267 fileout.setf(std::ios::scientific | std::ios::fixed);
276 static void ParseCsvString(
const std::string& CsvLine, std::array<double, N>& ValArray){
277 size_t FirstIndex = 0;
278 size_t LastIndex = 0;
279 std::string ParseBuff =
"";
282 while(LastIndex != std::string::npos){
284 LastIndex = CsvLine.find_first_of(
",", FirstIndex);
285 ParseBuff = CsvLine.substr(FirstIndex, LastIndex - FirstIndex);
286 ValBuff = std::stod(ParseBuff);
287 ValArray.at(j) = ValBuff;
288 FirstIndex = LastIndex + 1;
#define EventLog(a)
イベントログ用マクロ (任意メッセージ記録版)
Definition ARCSeventlog.hh:27
#define arcs_assert(a)
ARCS用assertマクロ a : assert条件
Definition ARCSassert.hh:17
CsvExpression
数値表現の定義
Definition CsvManipulator.hh:39
@ HEXFLOAT
16進数浮動小数点 (完全に正確な浮動小数点表記)
@ EXPONENTIAL
指数表示 (6.33e+4のような表記)
CSVファイル操作クラス
Definition CsvManipulator.hh:46
static void SaveFile(std::unique_ptr< std::array< std::array< double, N >, M > > &&Data, const std::string &FileName, size_t NN, size_t MM)
2次元std::arrayをCSVファイルに書き出す関数(スマートポインタ&書き出すサイズを指定する版)
Definition CsvManipulator.hh:140
static void SaveFile(const Matrix< N, M > &Data, const std::string &FileName)
行列をCSVファイルに書き出す関数
Definition CsvManipulator.hh:188
static void LoadFile(Matrix< N, M > &Data, const std::string &FileName)
CSVファイルから行列に読み込む関数
Definition CsvManipulator.hh:211
static void SaveFile(const std::array< std::array< double, N >, M > &Data, const std::string &FileName)
2次元std::arrayをCSVファイルに書き出す関数
Definition CsvManipulator.hh:127
static void SaveFile(const std::array< double, M > &Data, const std::string &FileName)
1次元std::arrayをCSVファイルに書き出す関数
Definition CsvManipulator.hh:54
static void LoadFile(std::array< std::array< double, N >, M > &Data, const std::string &FileName)
CSVファイルから2次元std::arrayに読み込む関数
Definition CsvManipulator.hh:163
static void SaveFile(const std::array< std::array< double, N >, M > &Data, const std::string &FileName, size_t NN, size_t MM)
2次元std::arrayをCSVファイルに書き出す関数(書き出すサイズを指定する版)
Definition CsvManipulator.hh:103
static void LoadFile(std::array< T, M > &Data, const std::string &FileName)
CSVファイルから1次元std::arrayに読み込む関数
Definition CsvManipulator.hh:72
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
constexpr TT GetElement(size_t n, size_t m) const
指定した要素番号の値を返す関数
Definition Matrix.hh:489