This commit is contained in:
张壹 2025-01-01 22:43:59 +08:00
parent 2ea609cb4c
commit 4dc7e5ebc2
3 changed files with 173 additions and 11 deletions

View File

@ -53,9 +53,7 @@ int main(int argc, char const *argv[]) try
geodsv_io tc;
tc.load_text("tmp/topo", ".txt", ColumnHead);
tc.cell(std::string("x (m)"), 0, 1);
tc.cell(std::string("y (m)"), 0, 2);
tc.cell(std::string("elevation (m)"), 0, 3);
tc.set_column_names({"x (m)", "y (m)", "elev (m)"});
array<point3dc> topo;
tc.get_column_point3dc(topo, 1, 2, 3);
@ -69,12 +67,15 @@ int main(int argc, char const *argv[]) try
//tc.column_output("C3", Disable);
array<double> elev;
tc.get_column(elev, "elevation (m)");
tc.get_column(elev, "elev (m)");
elev.for_each([](double &d, size_t i){d += 100.0;});
tc.add_column(-1, "elev_plus");
tc.add_column(2, "elev_plus");
tc.fill_column(elev, "elev_plus");
tc.add_row(3);
tc.fill_row(array<double>{4.4, 3.3, 2.2, 1.1}, 3);
_1s_vector s = tc.get_tags();
s.push_back("Elev = 1000");
tc.set_tags(s);

View File

@ -79,7 +79,7 @@ void gctl::dsv_io::get_row_names(std::vector<std::string> &names)
names.resize(row_num_);
for (size_t i = 1; i < row_num_; i++)
{
names[i] = table_[i][0].str_;
names[i - 1] = table_[i][0].str_;
}
return;
}
@ -89,7 +89,7 @@ void gctl::dsv_io::get_column_names(std::vector<std::string> &names)
names.resize(col_num_);
for (size_t i = 1; i < col_num_; i++)
{
names[i] = table_[0][i].str_;
names[i - 1] = table_[0][i].str_;
}
return;
}
@ -98,7 +98,7 @@ void gctl::dsv_io::set_row_names(const std::vector<std::string> &names)
{
for (size_t i = 1; i <= std::min(row_num_, (int) names.size()); i++)
{
table_[i][0].str_ = names[i];
table_[i][0].str_ = names[i - 1];
}
table_[0][0].str_ = "row_name";
@ -109,7 +109,7 @@ void gctl::dsv_io::set_column_names(const std::vector<std::string> &names)
{
for (size_t i = 1; i <= std::min(col_num_, (int) names.size()); i++)
{
table_[0][i].str_ = names[i];
table_[0][i].str_ = names[i - 1];
}
return;
}
@ -501,6 +501,42 @@ void gctl::dsv_io::add_column(std::string id_name, std::string name)
return;
}
void gctl::dsv_io::add_row(std::string name)
{
std::vector<table_cell> empty_line;
table_.push_back(empty_line);
table_.back().resize(col_num_ + 1);
table_.back().front().str_ = name;
row_num_++;
return;
}
void gctl::dsv_io::add_row(int idx, std::string name)
{
std::vector<table_cell> empty_line;
if (idx <= 0)
{
table_.push_back(empty_line);
table_.back().resize(col_num_ + 1);
table_.back().front().str_ = name;
row_num_++;
}
else
{
table_.insert(table_.begin() + idx, empty_line);
table_[idx].resize(col_num_ + 1);
table_[idx].front().str_ = name;
row_num_++;
}
return;
}
void gctl::dsv_io::add_row(std::string id_name, std::string name)
{
add_row(name_index(id_name), name);
return;
}
gctl::geodsv_io::geodsv_io(){}
gctl::geodsv_io::~geodsv_io(){}
@ -585,6 +621,42 @@ void gctl::geodsv_io::fill_column_point3dc(const array<point3dc> &data, std::str
return;
}
void gctl::geodsv_io::fill_column_point3ds(const array<point3ds> &data, int rid, int pid, int tid, int p)
{
if (rid > col_num_ || pid > col_num_ || tid > col_num_ || rid == pid || pid == tid || tid == rid
|| rid <= 0 || pid <= 0 || tid <= 0)
{
throw std::runtime_error("[gctl::geodsv_io] Invalid column index.");
}
std::stringstream ss;
std::string s;
for (size_t i = 1; i < std::min(row_num_, (int) data.size()); i++)
{
ss.clear();
ss << data[i - 1].rad;
ss >> s;
table_[i][rid].str_ = s;
ss.clear();
ss << data[i - 1].lon;
ss >> s;
table_[i][pid].str_ = s;
ss.clear();
ss << data[i - 1].lat;
ss >> s;
table_[i][tid].str_ = s;
}
return;
}
void gctl::geodsv_io::fill_column_point3ds(const array<point3ds> &data, std::string rname, std::string pname, std::string tname, int p)
{
fill_column_point3ds(data, name_index(rname, false), name_index(pname, false), name_index(tname, false), p);
return;
}
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)
@ -630,3 +702,27 @@ void gctl::geodsv_io::get_column_point3dc(array<point3dc> &data, std::string xna
get_column_point3dc(data, name_index(xname, false), name_index(yname, false), name_index(zname, false));
return;
}
void gctl::geodsv_io::get_column_point3ds(array<point3ds> &data, int rid, int pid, int tid)
{
if (rid > col_num_ || pid > col_num_ || tid > col_num_ || rid == pid || pid == tid || tid == rid
|| rid <= 0 || pid <= 0 || tid <= 0)
{
throw std::runtime_error("[gctl::geodsv_io] Invalid column index.");
}
data.resize(row_num_);
for (size_t i = 1; i <= row_num_; i++)
{
data[i - 1].rad = table_[i][rid].value<double>();
data[i - 1].lon = table_[i][pid].value<double>();
data[i - 1].lat = table_[i][tid].value<double>();
}
return;
}
void gctl::geodsv_io::get_column_point3ds(array<point3ds> &data, std::string rname, std::string pname, std::string tname)
{
get_column_point3ds(data, name_index(rname, false), name_index(pname, false), name_index(tname, false));
return;
}

View File

@ -353,7 +353,7 @@ namespace gctl
void add_column(std::string name = "");
/**
* @brief idx的列后添加一个空白列
* @brief idx的列插入一个空白列
*
* @param idx 0
* @param name
@ -361,13 +361,36 @@ namespace gctl
void add_column(int idx, std::string name = "");
/**
* @brief id_name的列后添加一个空白列
* @brief id_name的列插入一个空白列
*
* @param id_name
* @param name
*/
void add_column(std::string id_name, std::string name = "");
/**
* @brief
*
* @param name
*/
void add_row(std::string name = "");
/**
* @brief idx的列插入一个空白行
*
* @param idx 0
* @param name
*/
void add_row(int idx, std::string name = "");
/**
* @brief id_name的列插入一个空白行
*
* @param id_name
* @param name
*/
void add_row(std::string id_name, std::string name = "");
/**
* @brief
*
@ -669,6 +692,28 @@ namespace gctl
*/
void fill_column_point3dc(const array<point3dc> &data, std::string xname, std::string yname, std::string zname, int p = 6);
/**
* @brief
*
* @param rid rad坐标列索引 1
* @param pid phi坐标 1
* @param tid theta坐标 1
* @param data
* @param p
*/
void fill_column_point3ds(const array<point3ds> &data, int rid, int pid, int tid, int p = 6);
/**
* @brief
*
* @param rname rad坐标列名称 1
* @param pname phi坐标 1
* @param tname theta坐标 1
* @param data
* @param p
*/
void fill_column_point3ds(const array<point3ds> &data, std::string rname, std::string pname, std::string tname, int p = 6);
/**
* @brief
*
@ -706,6 +751,26 @@ namespace gctl
* @param data
*/
void get_column_point3dc(array<point3dc> &data, std::string xname, std::string yname, std::string zname);
/**
* @brief
*
* @param rid rad坐标列索引 1
* @param pid phi坐标 1
* @param tid theta坐标 1
* @param data
*/
void get_column_point3ds(array<point3ds> &data, int rid, int pid, int tid);
/**
* @brief
*
* @param rname rad坐标列名称 1
* @param pname phi坐标 1
* @param tname theta坐标 1
* @param data
*/
void get_column_point3ds(array<point3ds> &data, std::string rname, std::string pname, std::string tname);
};
}