This commit is contained in:
张壹 2025-02-10 21:25:13 +08:00
parent 6569b9a1b9
commit b184ac95fb
8 changed files with 136 additions and 37 deletions

View File

@ -26,7 +26,7 @@ add_example(kde_ex OFF)
add_example(meshio_ex OFF) add_example(meshio_ex OFF)
add_example(autodiff_ex OFF) add_example(autodiff_ex OFF)
add_example(multinary_ex OFF) add_example(multinary_ex OFF)
add_example(text_io_ex OFF) add_example(text_io_ex ON)
add_example(getoption_ex OFF) add_example(getoption_ex OFF)
add_example(process_ex OFF) add_example(process_ex OFF)
add_example(array_ex OFF) add_example(array_ex OFF)

View File

@ -34,8 +34,9 @@ int main(int argc, char const *argv[]) try
dsv_io tc, tout; dsv_io tc, tout;
tc.delimeter('|'); tc.delimeter('|');
tc.load_text("tmp/world_data", ".txt", BothHead); tc.head_number(1);
//tc.info(); tc.load_text("tmp/world_data", ".txt", ColHead|RowHead);
tc.info(AttInfo|HeadInfo|TagInfo|ColInfo|RowInfo);
//tc.set_column_type(Int, "IndepYear_n"); //tc.set_column_type(Int, "IndepYear_n");
//tc.filt_column("IndepYear_n < 0", {"IndepYear_n"}, {"Name_s", "Population_n", "GNP_n"}, tout); //tc.filt_column("IndepYear_n < 0", {"IndepYear_n"}, {"Name_s", "Population_n", "GNP_n"}, tout);

View File

@ -43,7 +43,7 @@ gctl::dsv_io::~dsv_io()
clear(); clear();
} }
gctl::dsv_io::dsv_io(std::string filename, std::string file_exten, table_headtype_e t) gctl::dsv_io::dsv_io(std::string filename, std::string file_exten, int t)
{ {
file_ = ""; file_ = "";
att_sym_ = '#'; att_sym_ = '#';
@ -205,7 +205,7 @@ gctl::table_cell_type gctl::dsv_io::column_type(std::string name)
return column_type(name_index(name, false)); return column_type(name_index(name, false));
} }
void gctl::dsv_io::load_text(std::string filename, std::string file_exten, table_headtype_e t) void gctl::dsv_io::load_text(std::string filename, std::string file_exten, int t)
{ {
std::ifstream infile; std::ifstream infile;
open_infile(infile, filename, file_exten); open_infile(infile, filename, file_exten);
@ -290,7 +290,7 @@ void gctl::dsv_io::load_text(std::string filename, std::string file_exten, table
} }
} }
if (t == ColumnHead) // 有列头 需要补齐空白的行头 if (t == ColHead) // 有列头 需要补齐空白的行头
{ {
row_num_ = table_.size() - 1; row_num_ = table_.size() - 1;
col_num_ = table_[0].size(); col_num_ = table_[0].size();
@ -310,7 +310,7 @@ void gctl::dsv_io::load_text(std::string filename, std::string file_exten, table
table_[0].resize(col_num_ + 1); table_[0].resize(col_num_ + 1);
} }
if (t == BothHead) // 有行头和列头 if ((t & RowHead) && (t & ColHead)) // 有行头和列头
{ {
row_num_ = table_.size() - 1; row_num_ = table_.size() - 1;
col_num_ = table_[0].size() - 1; col_num_ = table_[0].size() - 1;
@ -320,7 +320,7 @@ void gctl::dsv_io::load_text(std::string filename, std::string file_exten, table
return; return;
} }
void gctl::dsv_io::load_csv(std::string filename, table_headtype_e t) void gctl::dsv_io::load_csv(std::string filename, int t)
{ {
delimeter(','); delimeter(',');
load_text(filename, ".csv", t); load_text(filename, ".csv", t);
@ -396,15 +396,41 @@ void gctl::dsv_io::init_table(int row, int col)
return; return;
} }
void gctl::dsv_io::info(table_headtype_e t) void gctl::dsv_io::info(int t)
{ {
std::clog << "File: " << file_ << "\n------------\n"; std::clog << "File: " << file_ << "\n------------\n";
std::clog << "Head(s): " << head_num_ << "\n"; std::clog << "Head(s): " << head_num_ << "\n";
std::clog << "Annotation(s): " << annotates_.size() << "\n"; if (t & HeadInfo)
std::clog << "Tag(s): " << tags_.size() << "\n"; {
std::clog << "------------\n"; for (size_t i = 0; i < heads_.size(); i++)
{
std::clog << heads_[i] << "\n";
}
std::clog << "------------\n";
}
if (t == ColumnHead || t == BothHead) std::clog << "Annotation(s): " << annotates_.size() << "\n";
if (t & AttInfo)
{
for (size_t i = 0; i < annotates_.size(); i++)
{
std::clog << annotates_[i] << "\n";
}
std::clog << "------------\n";
}
std::clog << "Tag(s): " << tags_.size() << "\n";
if (t & TagInfo)
{
for (size_t i = 0; i < tags_.size(); i++)
{
std::clog << tags_[i] << "\n";
}
std::clog << "------------\n";
}
else std::clog << "------------\n";
if (t & ColInfo)
{ {
std::clog << "Columns:\n"; std::clog << "Columns:\n";
for (size_t i = 1; i <= col_num_; i++) for (size_t i = 1; i <= col_num_; i++)
@ -429,10 +455,10 @@ void gctl::dsv_io::info(table_headtype_e t)
if (!table_[0][i].out_ok_) std::clog << " (No output)"; if (!table_[0][i].out_ok_) std::clog << " (No output)";
std::clog << std::endl; std::clog << std::endl;
} }
std::clog << "============\n"; std::clog << "------------\n";
} }
if (t == RowHead || t == BothHead) if (t & RowInfo)
{ {
std::clog << "Rows:\n"; std::clog << "Rows:\n";
for (size_t i = 1; i <= row_num_; i++) for (size_t i = 1; i <= row_num_; i++)
@ -457,7 +483,7 @@ void gctl::dsv_io::info(table_headtype_e t)
if (!table_[i][0].out_ok_) std::clog << " (No output)"; if (!table_[i][0].out_ok_) std::clog << " (No output)";
std::clog << std::endl; std::clog << std::endl;
} }
std::clog << "============\n"; std::clog << "------------\n";
} }
return; return;
} }
@ -941,7 +967,7 @@ gctl::geodsv_io::geodsv_io(){}
gctl::geodsv_io::~geodsv_io(){} gctl::geodsv_io::~geodsv_io(){}
gctl::geodsv_io::geodsv_io(std::string filename, std::string file_exten, table_headtype_e t) gctl::geodsv_io::geodsv_io(std::string filename, std::string file_exten, int t)
{ {
file_ = ""; file_ = "";
att_sym_ = '#'; att_sym_ = '#';

View File

@ -105,15 +105,25 @@ namespace gctl
}; };
/** /**
* @brief * @brief
*
*/ */
enum table_headtype_e enum table_headtype_e
{ {
NoHead, // 没有表头 NoHead = 1, // 0001 无表头
BothHead, // 同时有行与列表头 ColHead = 2, // 0010 有列表头
ColumnHead, // 只有列表头 RowHead = 4, // 0100 有行表头
RowHead, // 只有行表头 };
/**
* @brief
*/
enum table_infotype_e
{
TagInfo = 1, // 00001
AttInfo = 2, // 00010
HeadInfo = 4, // 00100
RowInfo = 8, // 01000
ColInfo = 16, // 10000
}; };
/** /**
@ -161,7 +171,7 @@ namespace gctl
* @param file_exten * @param file_exten
* @param t * @param t
*/ */
dsv_io(std::string filename, std::string file_exten = ".txt", table_headtype_e t = NoHead); dsv_io(std::string filename, std::string file_exten = ".txt", int t = NoHead);
/** /**
* @brief * @brief
@ -382,14 +392,14 @@ namespace gctl
* @param file_exten * @param file_exten
* @param t * @param t
*/ */
void load_text(std::string filename, std::string file_exten = ".txt", table_headtype_e t = NoHead); void load_text(std::string filename, std::string file_exten = ".txt", int t = NoHead);
/** /**
* @brief CSV文件 * @brief CSV文件
* *
* @param filename * @param filename
*/ */
void load_csv(std::string filename, table_headtype_e t = ColumnHead); void load_csv(std::string filename, int t = ColHead);
/** /**
* @brief * @brief
@ -419,7 +429,7 @@ namespace gctl
* *
* @param t * @param t
*/ */
void info(table_headtype_e t = ColumnHead); void info(int t);
/** /**
* @brief name和R<id>C<id> * @brief name和R<id>C<id>
@ -861,7 +871,7 @@ namespace gctl
* @param filename * @param filename
* @param file_exten * @param file_exten
*/ */
geodsv_io(std::string filename, std::string file_exten = ".txt", table_headtype_e t = NoHead); geodsv_io(std::string filename, std::string file_exten = ".txt", int t = NoHead);
/** /**
* @brief * @brief

53
out.txt Normal file
View File

@ -0,0 +1,53 @@
Code_s|Continent_s|Name_s|Population_n|GNP_n
ANT|North America|Netherlands Antilles|217000|1941
AIA|North America|Anguilla|8000|63.2
ATG|North America|Antigua and Barbuda|68000|612
ARG|South America|Argentina|37032000|340238
ABW|North America|Aruba|103000|828
BHS|North America|Bahamas|307000|3527
BRB|North America|Barbados|270000|2223
BLZ|North America|Belize|241000|630
BMU|North America|Bermuda|65000|2328
BOL|South America|Bolivia|8329000|8571
BRA|South America|Brazil|170115000|776739
VGB|North America|Virgin Islands, British|21000|612
CYM|North America|Cayman Islands|38000|1263
CHL|South America|Chile|15211000|72949
CRI|North America|Costa Rica|4023000|10226
DMA|North America|Dominica|71000|256
DOM|North America|Dominican Republic|8495000|15846
ECU|South America|Ecuador|12646000|19770
SLV|North America|El Salvador|6276000|11863
FLK|South America|Falkland Islands|2000|0
GRD|North America|Grenada|94000|318
GRL|North America|Greenland|56000|0
GLP|North America|Guadeloupe|456000|3501
GTM|North America|Guatemala|11385000|19008
GUY|South America|Guyana|861000|722
HTI|North America|Haiti|8222000|3459
HND|North America|Honduras|6485000|5333
JAM|North America|Jamaica|2583000|6871
CAN|North America|Canada|31147000|598862
COL|South America|Colombia|42321000|102896
CUB|North America|Cuba|11201000|17843
MTQ|North America|Martinique|395000|2731
MEX|North America|Mexico|98881000|414972
MSR|North America|Montserrat|11000|109
NIC|North America|Nicaragua|5074000|1988
PAN|North America|Panama|2856000|9131
PRY|South America|Paraguay|5496000|8444
PER|South America|Peru|25662000|64140
PRI|North America|Puerto Rico|3869000|34100
GUF|South America|French Guiana|181000|681
KNA|North America|Saint Kitts and Nevis|38000|299
LCA|North America|Saint Lucia|154000|571
VCT|North America|Saint Vincent and the Grenadines|114000|285
SPM|North America|Saint Pierre and Miquelon|7000|0
SUR|South America|Suriname|417000|870
TTO|North America|Trinidad and Tobago|1295000|6232
TCA|North America|Turks and Caicos Islands|17000|96
URY|South America|Uruguay|3337000|20831
VEN|South America|Venezuela|24170000|95023
USA|North America|United States|278357000|8510700
VIR|North America|Virgin Islands, U.S.|93000|0
|Asia|China|14000000|1949

View File

@ -217,13 +217,21 @@ void quit(const std::vector<std::string> &cmd_units)
void info(const std::vector<std::string> &cmd_units) void info(const std::vector<std::string> &cmd_units)
{ {
// info [column|row|both] std::smatch ret;
std::regex pata("att"), patt("tag"), patc("col"), patr("row"), path("hdr");
// info [att|tag|hdr|col|row]
int info_code;
if (cmd_units.size() > 1) if (cmd_units.size() > 1)
{ {
if (cmd_units[1] == "row") tc.info(RowHead); if (regex_search(cmd_units[1], ret, pata)) info_code = AttInfo;
if (cmd_units[1] == "both") tc.info(BothHead); if (regex_search(cmd_units[1], ret, patt)) info_code = info_code|TagInfo;
if (regex_search(cmd_units[1], ret, patc)) info_code = info_code|ColInfo;
if (regex_search(cmd_units[1], ret, patr)) info_code = info_code|RowInfo;
if (regex_search(cmd_units[1], ret, path)) info_code = info_code|HeadInfo;
tc.info(info_code);
} }
else tc.info(); else tc.info(ColInfo);
return; return;
} }
@ -320,11 +328,11 @@ void load_file(const std::vector<std::string> &cmd_units)
copy_str[i] = cmd_units[i + 2]; copy_str[i] = cmd_units[i + 2];
} }
table_headtype_e ht = NoHead; int ht = NoHead;
if (copy_str[0] == "nohead") ht = NoHead; if (copy_str[0] == "nohead") ht = NoHead;
else if (copy_str[0] == "column") ht = ColumnHead; else if (copy_str[0] == "column") ht = ColHead;
else if (copy_str[0] == "row") ht = RowHead; else if (copy_str[0] == "row") ht = RowHead;
else if (copy_str[0] == "both") ht = BothHead; else if (copy_str[0] == "both") ht = RowHead|ColHead;
int hnum = 0; int hnum = 0;
if (copy_str[1] != "null") hnum = atoi(copy_str[1].c_str()); if (copy_str[1] != "null") hnum = atoi(copy_str[1].c_str());

View File

@ -28,6 +28,7 @@
#ifndef GCTL_DSVIEWER_H #ifndef GCTL_DSVIEWER_H
#define GCTL_DSVIEWER_H #define GCTL_DSVIEWER_H
#include <regex>
#include "../../lib/gctl_config.h" #include "../../lib/gctl_config.h"
#include "../../lib/io.h" #include "../../lib/io.h"

View File

@ -1,8 +1,8 @@
#### quit #### quit
Does what it says. Does what it says.
#### info [column|row|both] #### info [att|tag|hdr|col|row]
Show the table information. Show the table information. 'att' shows the annotations, 'tag' shows the tag lines, 'hdr' shows the head lines, 'col' shows the columns' summary, and 'row' shows the rows' summary. Use '|' to separate multiple options.
#### head #### head
Show the first `n` (the default is 10) rows of the table. Show the first `n` (the default is 10) rows of the table.