update dsv_io

This commit is contained in:
张壹 2025-01-01 17:14:19 +08:00
parent f2345de489
commit 2ea609cb4c
5 changed files with 135 additions and 60 deletions

View File

@ -32,7 +32,7 @@ using namespace gctl;
int main(int argc, char const *argv[]) try int main(int argc, char const *argv[]) try
{ {
/*
dsv_io tc; dsv_io tc;
tc.set_delimeter('|'); tc.set_delimeter('|');
tc.load_text("tmp/world_data", ".txt", BothHead); tc.load_text("tmp/world_data", ".txt", BothHead);
@ -49,16 +49,16 @@ int main(int argc, char const *argv[]) try
//name.show(std::cout, ','); //name.show(std::cout, ',');
tc.save_csv("out"); tc.save_csv("out");
*/
/*
geodsv_io tc; geodsv_io tc;
tc.load_text("tmp/topo", ".txt", ColumnHead); tc.load_text("tmp/topo", ".txt", ColumnHead);
tc.cell(0, 1, std::string("x (m)")); tc.cell(std::string("x (m)"), 0, 1);
tc.cell(0, 2, std::string("y (m)")); tc.cell(std::string("y (m)"), 0, 2);
tc.cell(0, 3, std::string("elevation (m)")); tc.cell(std::string("elevation (m)"), 0, 3);
array<point3dc> topo; array<point3dc> topo;
tc.get_column_point3dc(1, 2, 3, topo); tc.get_column_point3dc(topo, 1, 2, 3);
std::clog << std::setprecision(11) << topo.front().z << "\n"; std::clog << std::setprecision(11) << topo.front().z << "\n";
std::clog << topo.back().x << "," << topo.back().y << "," << topo.back().z << "\n"; std::clog << topo.back().x << "," << topo.back().y << "," << topo.back().z << "\n";
@ -66,7 +66,14 @@ int main(int argc, char const *argv[]) try
display_vector(tc.get_annotoations(), std::clog, '\n'); display_vector(tc.get_annotoations(), std::clog, '\n');
display_vector(tc.get_head_records(), std::clog, '\n'); display_vector(tc.get_head_records(), std::clog, '\n');
tc.column_output("C3", Disable); //tc.column_output("C3", Disable);
array<double> elev;
tc.get_column(elev, "elevation (m)");
elev.for_each([](double &d, size_t i){d += 100.0;});
tc.add_column(-1, "elev_plus");
tc.fill_column(elev, "elev_plus");
_1s_vector s = tc.get_tags(); _1s_vector s = tc.get_tags();
s.push_back("Elev = 1000"); s.push_back("Elev = 1000");
@ -74,11 +81,11 @@ int main(int argc, char const *argv[]) try
tc.save_csv("out"); tc.save_csv("out");
double c = 4.25242153654; double c = 4.25242153654;
tc.cell(2, 1, c, 12); tc.cell(c, 2, 1, 12);
std::clog << std::setprecision(12) << tc.cell<double>(2, 1) << "\n"; std::clog << std::setprecision(12) << tc.cell<double>(2, 1) << "\n";
tc.info(); tc.info();
*/
return 0; return 0;
} }
catch(std::exception &e) catch(std::exception &e)

View File

@ -511,27 +511,27 @@ namespace gctl
* @param[in] np2 Standard deviation (Gauss) or hig bound value (Even). * @param[in] np2 Standard deviation (Gauss) or hig bound value (Even).
* @param[in] mode Random types. 'RdNormal' for Gaussian distributed numbers and * @param[in] mode Random types. 'RdNormal' for Gaussian distributed numbers and
* 'RdUniform' for even distributed numbers. * 'RdUniform' for even distributed numbers.
* @param[in] seed Random seed. * @param[in] seed Random seed. Input 0 to select the seed based on the current time.
*/ */
void random_float(ArrValType np1, ArrValType np2, random_type_e mode = RdNormal, unsigned int seed = 0); void random_float(ArrValType np1, ArrValType np2, random_type_e mode = RdNormal, unsigned int seed = 0);
/** /**
* @brief Initialize the array with selected random types. * @brief Initialize the array with selected random types.
* *
* @param[in] np1 Mean (Gauss) or low bound value (Even) * @param[in] np1 Low bound value.
* @param[in] np2 Standard deviation (Gauss) or hig bound value (Even). * @param[in] np2 Hig bound value.
* @param[in] seed Random seed. * @param[in] seed Random seed. Input 0 to select the seed based on the current time.
*/ */
void random_int(ArrValType np1, ArrValType np2, unsigned int seed = 0); void random_int(ArrValType np1, ArrValType np2, unsigned int seed = 0);
/** /**
* @brief Set elements' value as a sequent. * @brief Set elements' value as a sequent.
* *
* @param st_val Start value. * @param st_val Start value of the sequent.
* @param inc Increasement. * @param inc Increasement of the sequent.
* @param st_id Start index. * @param st_id Start index. The default starts from the first element
* @param size Operating size. * @param size Operating size. The default operates on all elements
* @param space Indexing spacing. * @param space Indexing spacing. you can skip elements when create the sequent. The default is no skipping.
*/ */
void sequence(ArrValType st_val, ArrValType inc, size_t st_id = 0, void sequence(ArrValType st_val, ArrValType inc, size_t st_id = 0,
size_t size = std::numeric_limits<size_t>::max(), size_t space = 0); size_t size = std::numeric_limits<size_t>::max(), size_t space = 0);

View File

@ -456,6 +456,51 @@ void gctl::dsv_io::row_output(std::string name, switch_type_e s)
return; return;
} }
void gctl::dsv_io::add_column(std::string name)
{
table_cell empty_cell;
for (size_t i = 0; i < table_.size(); i++)
{
table_[i].push_back(empty_cell);
}
table_[0].back().str_ = name;
col_num_++;
return;
}
void gctl::dsv_io::add_column(int idx, std::string name)
{
table_cell empty_cell;
if (idx <= 0)
{
for (size_t i = 0; i < table_.size(); i++)
{
table_[i].push_back(empty_cell);
}
table_[0].back().str_ = name;
col_num_++;
}
else
{
for (size_t i = 0; i < table_.size(); i++)
{
table_[i].insert(table_[i].begin() + idx, empty_cell);
}
table_[0][idx].str_ = name;
col_num_++;
}
return;
}
void gctl::dsv_io::add_column(std::string id_name, std::string name)
{
add_column(name_index(id_name), name);
return;
}
gctl::geodsv_io::geodsv_io(){} gctl::geodsv_io::geodsv_io(){}
gctl::geodsv_io::~geodsv_io(){} gctl::geodsv_io::~geodsv_io(){}
@ -474,7 +519,7 @@ gctl::geodsv_io::geodsv_io(std::string filename, std::string file_exten, table_h
else load_text(filename, file_exten, t); else load_text(filename, file_exten, t);
} }
void gctl::geodsv_io::fill_column_point2dc(int xid, int yid, const array<point2dc> &data, int p) void gctl::geodsv_io::fill_column_point2dc(const array<point2dc> &data, int xid, int yid, int p)
{ {
if (xid > col_num_ || yid > col_num_ || xid == yid || xid <= 0 || yid <= 0) if (xid > col_num_ || yid > col_num_ || xid == yid || xid <= 0 || yid <= 0)
{ {
@ -498,13 +543,13 @@ void gctl::geodsv_io::fill_column_point2dc(int xid, int yid, const array<point2d
return; return;
} }
void gctl::geodsv_io::fill_column_point2dc(std::string xname, std::string yname, const array<point2dc> &data, int p) void gctl::geodsv_io::fill_column_point2dc(const array<point2dc> &data, std::string xname, std::string yname, int p)
{ {
fill_column_point2dc(name_index(xname, false), name_index(yname, false), data, p); fill_column_point2dc(data, name_index(xname, false), name_index(yname, false), p);
return; return;
} }
void gctl::geodsv_io::fill_column_point3dc(int xid, int yid, int zid, const array<point3dc> &data, int p) void gctl::geodsv_io::fill_column_point3dc(const array<point3dc> &data, int xid, int yid, int zid, int p)
{ {
if (xid > col_num_ || yid > col_num_ || zid > col_num_ || xid == yid || yid == zid || xid == zid if (xid > col_num_ || yid > col_num_ || zid > col_num_ || xid == yid || yid == zid || xid == zid
|| xid <= 0 || yid <= 0 || zid <= 0) || xid <= 0 || yid <= 0 || zid <= 0)
@ -534,13 +579,13 @@ void gctl::geodsv_io::fill_column_point3dc(int xid, int yid, int zid, const arra
return; return;
} }
void gctl::geodsv_io::fill_column_point3dc(std::string xname, std::string yname, std::string zname, const array<point3dc> &data, int p) void gctl::geodsv_io::fill_column_point3dc(const array<point3dc> &data, std::string xname, std::string yname, std::string zname, int p)
{ {
fill_column_point3dc(name_index(xname, false), name_index(yname, false), name_index(zname, false), data, p); fill_column_point3dc(data, name_index(xname, false), name_index(yname, false), name_index(zname, false), p);
return; return;
} }
void gctl::geodsv_io::get_column_point2dc(int xid, int yid, array<point2dc> &data) void gctl::geodsv_io::get_column_point2dc(array<point2dc> &data, int xid, int yid)
{ {
if (xid > col_num_ || yid > col_num_ || xid == yid || xid <= 0 || yid <= 0) if (xid > col_num_ || yid > col_num_ || xid == yid || xid <= 0 || yid <= 0)
{ {
@ -556,13 +601,13 @@ void gctl::geodsv_io::get_column_point2dc(int xid, int yid, array<point2dc> &dat
return; return;
} }
void gctl::geodsv_io::get_column_point2dc(std::string xname, std::string yname, array<point2dc> &data) void gctl::geodsv_io::get_column_point2dc(array<point2dc> &data, std::string xname, std::string yname)
{ {
get_column_point2dc(name_index(xname, false), name_index(yname, false), data); get_column_point2dc(data, name_index(xname, false), name_index(yname, false));
return; return;
} }
void gctl::geodsv_io::get_column_point3dc(int xid, int yid, int zid, array<point3dc> &data) void gctl::geodsv_io::get_column_point3dc(array<point3dc> &data, int xid, int yid, int zid)
{ {
if (xid > col_num_ || yid > col_num_ || zid > col_num_ || xid == yid || yid == zid || xid == zid if (xid > col_num_ || yid > col_num_ || zid > col_num_ || xid == yid || yid == zid || xid == zid
|| xid <= 0 || yid <= 0 || zid <= 0) || xid <= 0 || yid <= 0 || zid <= 0)
@ -580,8 +625,8 @@ void gctl::geodsv_io::get_column_point3dc(int xid, int yid, int zid, array<point
return; return;
} }
void gctl::geodsv_io::get_column_point3dc(std::string xname, std::string yname, std::string zname, array<point3dc> &data) void gctl::geodsv_io::get_column_point3dc(array<point3dc> &data, std::string xname, std::string yname, std::string zname)
{ {
get_column_point3dc(name_index(xname, false), name_index(yname, false), name_index(zname, false), data); get_column_point3dc(data, name_index(xname, false), name_index(yname, false), name_index(zname, false));
return; return;
} }

View File

@ -344,6 +344,29 @@ namespace gctl
* @param s * @param s
*/ */
void row_output(std::string name, switch_type_e s = Disable); void row_output(std::string name, switch_type_e s = Disable);
/**
* @brief
*
* @param name
*/
void add_column(std::string name = "");
/**
* @brief idx的列后添加一个空白列
*
* @param idx 0
* @param name
*/
void add_column(int idx, std::string name = "");
/**
* @brief id_name的列后添加一个空白列
*
* @param id_name
* @param name
*/
void add_column(std::string id_name, std::string name = "");
/** /**
* @brief * @brief
@ -370,7 +393,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
template <typename T> void fill_column(int idx, const array<T> &data, int p = 6); template <typename T> void fill_column(const array<T> &data, int idx, int p = 6);
/** /**
* @brief * @brief
@ -380,7 +403,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
template <typename T> void fill_column(std::string name, const array<T> &data, int p = 6); template <typename T> void fill_column(const array<T> &data, std::string name, int p = 6);
/** /**
* @brief * @brief
@ -390,7 +413,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
template <typename T> void fill_row(int idx, const array<T> &data, int p = 6); template <typename T> void fill_row(const array<T> &data, int idx, int p = 6);
/** /**
* @brief * @brief
@ -400,7 +423,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
template <typename T> void fill_row(std::string name, const array<T> &data, int p = 6); template <typename T> void fill_row(const array<T> &data, std::string name, int p = 6);
/** /**
* @brief * @brief
@ -409,7 +432,7 @@ namespace gctl
* @param idx 1 * @param idx 1
* @param data * @param data
*/ */
template <typename T> void get_column(int idx, array<T> &data); template <typename T> void get_column(array<T> &data, int idx);
/** /**
* @brief * @brief
@ -418,7 +441,7 @@ namespace gctl
* @param name * @param name
* @param data * @param data
*/ */
template <typename T> void get_column(std::string name, array<T> &data); template <typename T> void get_column(array<T> &data, std::string name);
/** /**
* @brief * @brief
@ -427,7 +450,7 @@ namespace gctl
* @param idx 1 * @param idx 1
* @param data * @param data
*/ */
template <typename T> void get_row(int idx, array<T> &data); template <typename T> void get_row(array<T> &data, int idx);
/** /**
* @brief * @brief
@ -436,7 +459,7 @@ namespace gctl
* @param name * @param name
* @param data * @param data
*/ */
template <typename T> void get_row(std::string name, array<T> &data); template <typename T> void get_row(array<T> &data, std::string name);
/** /**
* @brief * @brief
@ -457,7 +480,7 @@ namespace gctl
* @param d * @param d
* @param p * @param p
*/ */
template <typename T> void cell(int r, int c, T d, int p = 6){table_[r][c].value(d, p); return;} template <typename T> void cell(T d, int r, int c, int p = 6){table_[r][c].value(d, p); return;}
}; };
template <typename T> template <typename T>
@ -488,7 +511,7 @@ namespace gctl
} }
template <typename T> template <typename T>
void dsv_io::fill_column(int idx, const array<T> &data, int p) void dsv_io::fill_column(const array<T> &data, int idx, int p)
{ {
if (idx > col_num_ || idx <= 0) if (idx > col_num_ || idx <= 0)
{ {
@ -503,14 +526,14 @@ namespace gctl
} }
template <typename T> template <typename T>
void dsv_io::fill_column(std::string name, const array<T> &data, int p) void dsv_io::fill_column(const array<T> &data, std::string name, int p)
{ {
fill_column(name_index(name, false), data, p); fill_column(data, name_index(name, false), p);
return; return;
} }
template <typename T> template <typename T>
void dsv_io::fill_row(int idx, const array<T> &data, int p) void dsv_io::fill_row(const array<T> &data, int idx, int p)
{ {
if (idx > row_num_ || idx <= 0) if (idx > row_num_ || idx <= 0)
{ {
@ -525,14 +548,14 @@ namespace gctl
} }
template <typename T> template <typename T>
void dsv_io::fill_row(std::string name, const array<T> &data, int p) void dsv_io::fill_row(const array<T> &data, std::string name, int p)
{ {
fill_row(name_index(name, true), data, p); fill_row(data, name_index(name, true), p);
return; return;
} }
template <typename T> template <typename T>
void dsv_io::get_column(int idx, array<T> &data) void dsv_io::get_column(array<T> &data, int idx)
{ {
if (idx > col_num_ || idx <= 0) if (idx > col_num_ || idx <= 0)
{ {
@ -548,14 +571,14 @@ namespace gctl
} }
template <typename T> template <typename T>
void dsv_io::get_column(std::string name, array<T> &data) void dsv_io::get_column(array<T> &data, std::string name)
{ {
get_column(name_index(name, false), data); get_column(data, name_index(name, false));
return; return;
} }
template <typename T> template <typename T>
void dsv_io::get_row(int idx, array<T> &data) void dsv_io::get_row(array<T> &data, int idx)
{ {
if (idx > row_num_ || idx <= 0) if (idx > row_num_ || idx <= 0)
{ {
@ -571,9 +594,9 @@ namespace gctl
} }
template <typename T> template <typename T>
void dsv_io::get_row(std::string name, array<T> &data) void dsv_io::get_row(array<T> &data, std::string name)
{ {
get_row(name_index(name, true), data); get_row(data, name_index(name, true));
return; return;
} }
@ -612,7 +635,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
void fill_column_point2dc(int xid, int yid, const array<point2dc> &data, int p = 6); void fill_column_point2dc(const array<point2dc> &data, int xid, int yid, int p = 6);
/** /**
* @brief * @brief
@ -622,7 +645,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
void fill_column_point2dc(std::string xname, std::string yname, const array<point2dc> &data, int p = 6); void fill_column_point2dc(const array<point2dc> &data, std::string xname, std::string yname, int p = 6);
/** /**
* @brief * @brief
@ -633,7 +656,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
void fill_column_point3dc(int xid, int yid, int zid, const array<point3dc> &data, int p = 6); void fill_column_point3dc(const array<point3dc> &data, int xid, int yid, int zid, int p = 6);
/** /**
* @brief * @brief
@ -644,7 +667,7 @@ namespace gctl
* @param data * @param data
* @param p * @param p
*/ */
void fill_column_point3dc(std::string xname, std::string yname, std::string zname, const array<point3dc> &data, int p = 6); void fill_column_point3dc(const array<point3dc> &data, std::string xname, std::string yname, std::string zname, int p = 6);
/** /**
* @brief * @brief
@ -653,7 +676,7 @@ namespace gctl
* @param yid y坐标列索引 1 * @param yid y坐标列索引 1
* @param data * @param data
*/ */
void get_column_point2dc(int xid, int yid, array<point2dc> &data); void get_column_point2dc(array<point2dc> &data, int xid, int yid);
/** /**
* @brief * @brief
@ -662,7 +685,7 @@ namespace gctl
* @param yname y坐标列名称 * @param yname y坐标列名称
* @param data * @param data
*/ */
void get_column_point2dc(std::string xname, std::string yname, array<point2dc> &data); void get_column_point2dc(array<point2dc> &data, std::string xname, std::string yname);
/** /**
* @brief * @brief
@ -672,7 +695,7 @@ namespace gctl
* @param zid z坐标列索引 1 * @param zid z坐标列索引 1
* @param data * @param data
*/ */
void get_column_point3dc(int xid, int yid, int zid, array<point3dc> &data); void get_column_point3dc(array<point3dc> &data, int xid, int yid, int zid);
/** /**
* @brief * @brief
@ -682,7 +705,7 @@ namespace gctl
* @param zname z坐标列名称 * @param zname z坐标列名称
* @param data * @param data
*/ */
void get_column_point3dc(std::string xname, std::string yname, std::string zname, array<point3dc> &data); void get_column_point3dc(array<point3dc> &data, std::string xname, std::string yname, std::string zname);
}; };
} }

View File

@ -331,7 +331,7 @@ void statistic(const std::vector<std::string> &cmd_units)
_1d_array data; _1d_array data;
for (size_t i = 1; i < cmd_units.size(); i++) for (size_t i = 1; i < cmd_units.size(); i++)
{ {
tc.get_column(cmd_units[i], data); tc.get_column(data, cmd_units[i]);
std::clog << "column: " << cmd_units[i] std::clog << "column: " << cmd_units[i]
<< " | " << data.min() << "/" << data.mean() << "/" << data.max() << " | " << data.min() << "/" << data.mean() << "/" << data.max()
<< " | STD: " << data.std() << "\n"; << " | STD: " << data.std() << "\n";