51 static unsigned int str2uint (
const string& str)
53 istringstream IN(str);
64 istringstream IN(str);
75 istringstream IN(str);
86 istringstream IN(str);
128 static vector<string>
split(
const string& str,
const char delim,
bool splitOnce =
false)
130 vector<string> tokens;
134 while(out.find(delim) != string::npos) {
135 pos = out.find_first_of(delim);
136 tokens.push_back( removeEnclosingChar(out.substr(0, pos),
' ',
' ',
true) );
137 out = out.substr(pos+1);
141 tokens.push_back( removeEnclosingChar(out,
' ',
' ',
true) );
156 const string& encloser =
"([{\"")
158 if(str.find_first_of(encloser) == string::npos)
return split(str, delim);
160 string::size_type open, delim_pos, next_index = 0;
161 string pair, block, tail(str);
162 vector<string> tokens;
164 while (tail.find(delim) != string::npos) {
166 delim_pos = tail.find_first_of(delim);
169 open = tail.find_first_of(encloser);
172 while (open < delim_pos) {
174 block = getBlock(tail.substr(open, string::npos), tail.at(open));
176 next_index = open + block.size();
178 pair += tail.substr(0, next_index);
180 tail = tail.substr(next_index);
182 delim_pos = tail.find_first_of(delim);
184 open = tail.find_first_of(encloser);
187 pair += tail.substr(0, delim_pos);
189 pair = removeEnclosingChar(pair,
' ',
' ',
true);
191 tokens.push_back(pair);
194 if(delim_pos != string::npos) tail = tail.substr(delim_pos + 1);
198 if(tail.size() != 0) {
199 if(removeEnclosingChar(tail,
' ',
' ',
true).size() != 0)
200 tokens.push_back( removeEnclosingChar(tail,
' ',
' ',
true) );
213 static string getBlock(
const string& str,
const char start_c,
const char end_c =
'\0',
214 bool includeEnclosing =
true)
220 istringstream IN( removeEnclosingChar(str,
' ',
' ',
true) );
239 error(
"tstring::getBlock: unknown start of block \'%c\'\n", c);
246 while (IN.get(c) && IN.good() && !IN.eof() ) {
254 }
else if(c == start_c) {
256 out += __get_block(IN, start_c, end);
263 if(!closed)
fatal(
"missing closing character '%c' in %s.\n", end, str.c_str());
271 static string __get_block(istringstream& IN,
const char start_c,
const char end_c)
279 while (IN.get(c) && IN.good() && !IN.eof() ) {
287 }
else if(c == start_c) {
289 out += __get_block(IN, start_c, end_c);
296 if(!closed)
fatal(
"missing closing character '%c' in %s.\n", end_c, IN.str().c_str());
310 for (
unsigned int i = 0; i < s.size(); i++) {
312 s.erase(s.begin() + i);
328 if( (pos = out.find_first_of(c)) != string::npos )
329 out.erase(out.begin() + pos);
342 if( (pos = out.find_last_of(c)) != string::npos )
343 out.erase(out.begin() + pos);
356 static string removeEnclosingChar (
const string& str,
const char o,
const char c,
bool allowMissing =
false)
361 first = s.find_first_of(o, 0);
364 error(
"tstring::removeEnclosingChar:: string \"%s\" not starting with \"%c\"\n.", s.c_str(), o);
370 last = s.find_last_of(c);
371 if(last != s.length()-1 || last == string::npos) {
373 error(
"tstring::removeEnclosingChar:: string \"%s\" not ending with \"%c\"\n.", s.c_str(), c);
388 while(isspace(out[0]))
389 out.erase(out.begin());
394 static string replaceChar (
const string& str,
const char target,
const char replacement)
397 size_t pos = out.find_first_of(target, 0);
399 while(pos != string::npos) {
400 out[pos] = replacement;
401 pos = out.find_first_of(target, pos);
414 while(i < str.size()) {
416 if(str[i] !=
'.' && str[i] !=
'e' && str[i] !=
'-' && str[i] !=
'+')
426 static bool isNA(
const string& str)
428 if(
"NA" == str)
return true;
430 if(
"na" == str)
return true;
432 if(
"NaN" == str)
return true;
434 if(
"NAN" == str)
return true;
436 if(
"nan" == str)
return true;
A global class to handle string conversions and operations.
Definition: tstring.h:41
static double str2dble(const string &str)
Converts a string into a double.
Definition: tstring.h:84
static string removeEnclosingChar(const string &str, const char o, const char c, bool allowMissing=false)
Removes characters enclosing a string.
Definition: tstring.h:356
static int str2int(const string &str)
Converts a string into an integer.
Definition: tstring.h:73
static unsigned long str2ulong(const string &str)
Converts a string into an unsigned integer.
Definition: tstring.h:62
static vector< string > splitExcludeEnclosedDelimiters(const string &str, const char delim=',', const string &encloser="([{\"")
Splits a string into substrings (tokens) delimited by a single character.
Definition: tstring.h:155
static vector< string > split(const string &str, const char delim, bool splitOnce=false)
splits a string into substrings (tokens) delimited by a single character.
Definition: tstring.h:128
static string removeLeadingWhiteSpace(const string &str)
Definition: tstring.h:384
static bool isNA(const string &str)
Check whether the string is NA | NaN.
Definition: tstring.h:426
static string __get_block(istringstream &IN, const char start_c, const char end_c)
Internal function used by getBlock to recursively read nested blocks.
Definition: tstring.h:271
static bool isanumber(const string &str)
Check whether the string is a number.
Definition: tstring.h:410
static string removeChar(const string &str, const char c)
Removes a given character from a string.
Definition: tstring.h:306
tstring()
Definition: tstring.h:44
static string getBlock(const string &str, const char start_c, const char end_c='\0', bool includeEnclosing=true)
Reads a substring delimited by two enclosing character from a string.
Definition: tstring.h:213
static string int2str(const int i)
Writes an integer value into a string.
Definition: tstring.h:95
static string removeFirstCharOf(const string &str, const char c)
Removes the first of a character found in a string.
Definition: tstring.h:323
static unsigned int str2uint(const string &str)
Converts a string into an unsigned integer.
Definition: tstring.h:51
static string removeLastCharOf(const string &str, const char c)
Removes the last of a character found in a string.
Definition: tstring.h:337
static string dble2str(const double d)
Writes a floating-point value into a string.
Definition: tstring.h:115
static string ulong2str(const unsigned long i)
Writes an integer value into a string.
Definition: tstring.h:105
static string replaceChar(const string &str, const char target, const char replacement)
Definition: tstring.h:394
void fatal(const char *str,...)
Definition: output.cc:96
int error(const char *str,...)
Definition: output.cc:77