32 while (fp.get(ch) && !(ch ==
'\n' || ch ==
';'))
59 if (!(ch ==
'\n' || ch ==
';'))
66 unsigned parsewords(
const char* inbuf, std::vector<std::string>& slist,
const std::string& extra_tokens )
68 std::string token =
"=, \t\n\"";
69 token.append(extra_tokens);
71 std::string tmpstr(inbuf);
74 char* tokenp = strtok(tmpstr.data(), token.c_str());
75 while (tokenp && tokenp[0] !=
'#')
78 slist.push_back(std::string(tokenp));
79 tokenp = strtok(
nullptr, token.c_str());
84 unsigned parsewords(
const char* inbuf, std::list<std::string>& slist)
86 const char* token =
"=, \t\n";
87 std::string tmpstr(inbuf);
90 char* tokenp = strtok(tmpstr.data(), token);
91 while (tokenp && tokenp[0] !=
'#')
94 slist.push_back(std::string(tokenp));
95 tokenp = strtok(
nullptr, token);
100 int getwords(std::vector<std::string>& slist, std::istream& fp, std::string& aline)
102 const int max = 1024;
120 const std::string& extra_tokens )
122 const int max = 1024;
135 const std::string& extra_tokens )
137 const int max = 1024;
141 std::regex dash(
"-");
142 const std::string space_dash(
" -");
143 std::string merged(
s);
144 std::string unmerged = std::regex_replace(merged, dash, space_dash, std::regex_constants::format_default);
145 return parsewords(unmerged.c_str(), slist, extra_tokens);
153 void readXmol(std::istream& fxmol,
double* data,
int numvar)
155 std::vector<std::string> slist;
157 unsigned natom = atoi(slist.front().c_str());
160 for (
int i = 0; i < natom; i++)
163 for (
int ivar = 1; ivar <= numvar; ivar++)
165 data[ii++] = atof(slist[ivar].c_str());
179 int getwords(std::vector<std::string>& slist, std::istream& fpos,
const char* field,
const char* terminate)
182 std::array<char, 128> end_key;
183 if (std::snprintf(end_key.data(), end_key.size(),
"</%s>", field) < 0)
184 throw std::runtime_error(
"Error extract end_key from field.");
186 std::vector<std::string> vlist;
191 if (vlist[0] == terminate || vlist[0] == end_key.data())
193 slist.insert(slist.end(), std::make_move_iterator(vlist.begin()), std::make_move_iterator(vlist.end()));
201 unsigned parseXwords(
const char* inbuf, std::vector<std::string>& slist)
205 const char* token =
"=, <>\"\t\n";
206 std::string tmpstr(inbuf);
208 char* tokenp = strtok(tmpstr.data(), token);
209 while (tokenp && tokenp[0] !=
'#')
212 slist.push_back(std::string(tokenp));
213 tokenp = strtok(
nullptr, token);
218 int getXwords(std::vector<std::string>& slist, std::istream& fp)
220 const int max = 1024;
char * readLine(char *s, int max, std::istream &fp)
unsigned parsewords(const char *inbuf, std::vector< std::string > &slist, const std::string &extra_tokens)
int getXwords(std::vector< std::string > &slist, std::istream &fp)
void readXmol(std::istream &fxmol, double *data, int numvar)
int getwordsWithMergedNumbers(std::vector< std::string > &slist, std::istream &fp, int dummy, const std::string &extra_tokens)
int getwords(std::vector< std::string > &slist, std::istream &fp, std::string &aline)
unsigned parseXwords(const char *inbuf, std::vector< std::string > &slist)