1+ // =======================
2+ // AUTHOR : Peize Lin
3+ // DATE : 2021-12-08
4+ // =======================
5+
6+ #include " read_txt_tools.h"
7+
8+ #include < fstream>
9+ #include < sstream>
10+ #include < algorithm>
11+
12+ namespace Read_Txt_Tools
13+ {
14+ // {
15+ // INPUT_PARAMETERS: [1.0],
16+ // ecutwfc: [200, Ry]
17+ // }
18+ std::map<std::string, std::vector<std::string>> read_file_to_map (
19+ const std::string &file_name,
20+ const std::set<std::string> &comment_seps)
21+ {
22+ std::string str;
23+ std::ifstream ifs (file_name);
24+ std::map<std::string, std::vector<std::string>> m;
25+ while (ifs.good ())
26+ {
27+ std::getline (ifs,str);
28+ const std::vector<std::string> vec = Read_Txt_Tools::split_whitespace (Read_Txt_Tools::ignore_comment (str, comment_seps));
29+ if (vec.size ()>0 )
30+ m[vec[0 ]] = std::vector<std::string>(vec.begin ()+1 , vec.end ());
31+ }
32+ return m;
33+ }
34+
35+
36+
37+ // [
38+ // [INPUT_PARAMETERS, 1.0],
39+ // [ecutwfc, 200, Ry]
40+ // ]
41+ std::vector<std::vector<std::string>> read_file_to_vector (
42+ const std::string &file_name,
43+ const std::set<std::string> &comment_seps)
44+ {
45+ std::string str;
46+ std::ifstream ifs (file_name);
47+ std::vector<std::vector<std::string>> vec_all;
48+ while (ifs.good ())
49+ {
50+ std::getline (ifs,str);
51+ const std::vector<std::string> vec = Read_Txt_Tools::split_whitespace (Read_Txt_Tools::ignore_comment (str, comment_seps));
52+ if (vec.size ()>0 )
53+ vec_all.push_back (vec);
54+ }
55+ return vec_all;
56+ }
57+
58+
59+
60+ // [ecutwfc, 200, Ry]
61+ std::vector<std::string> split_whitespace (const std::string &str)
62+ {
63+ std::stringstream ss;
64+ ss<<str;
65+ std::vector<std::string> vec;
66+ std::string s;
67+ while (ss>>s)
68+ vec.push_back (s);
69+ return vec;
70+ }
71+
72+
73+
74+ // str:
75+ // ecutwfc 200 Ry # XXX
76+ // return:
77+ // ecutwfc 200 Ry
78+ std::string ignore_comment (const std::string &str, const std::set<std::string> &comment_seps)
79+ {
80+ std::string str_new = str;
81+ for (const std::string &sep : comment_seps)
82+ str_new = str_new.substr (0 , str_new.find (sep));
83+ return str_new;
84+ }
85+
86+
87+
88+ // return_prefix + content_new = content_old
89+ std::vector<std::vector<std::string>> cut_paragraph (
90+ std::vector<std::vector<std::string>> &content,
91+ const std::set<std::string> &labels)
92+ {
93+ std::vector<std::vector<std::string>>::iterator ptr=content.begin ()+1 ;
94+ for (; ptr<content.end (); ++ptr)
95+ {
96+ if (std::find (labels.begin (), labels.end (), (*ptr)[0 ]) != labels.end ())
97+ break ;
98+ }
99+ const std::vector<std::vector<std::string>> prefix = std::vector<std::vector<std::string>>(content.begin (), ptr);
100+ content = std::vector<std::vector<std::string>>(ptr, content.end ());
101+ return prefix;
102+ }
103+ }
0 commit comments