{
boost::cmatch what;
if (regex_match(file.c_str(), what, RegExp))
- return true;
+ return true;
return false;
}
+std::string BrukerDataSet::RemoveNewlines(std::string file)
+{
+ boost::regex regexNewline;
+ const char* pre_expression = "[[:cntrl:]]";
+ regexNewline.assign(pre_expression);
+
+ const char* pre_format = "";
+ std::ostringstream t(std::ios::out | std::ios::binary);
+ std::ostream_iterator<char, char> oi(t);
+ boost::regex_replace(oi, file.begin(), file.end(),
+ regexNewline, pre_format, boost::match_default | boost::format_all);
+ std::string s(t.str());
+ return s;
+ }
+
+std::string BrukerDataSet::RemoveSpaces(std::string file)
+{
+ boost::regex regexSpace;
+ const char* pre_expression = "[[:space:]]";
+ regexSpace.assign(pre_expression);
+ const char* pre_format = "";
+ std::ostringstream t(std::ios::out | std::ios::binary);
+ std::ostream_iterator<char, char> oi(t);
+ boost::regex_replace(oi, file.begin(), file.end(),
+ regexSpace, pre_format, boost::match_default | boost::format_all);
+ std::string s(t.str());
+ return s;
+ }
+
+
+
std::string BrukerDataSet::MatchBufferForText(std::string& file,const boost::regex& RegExp)
{
{
std::string Result;
Result=MatchBufferForText(file,BufferNValues);
- if (Result !="")
- return Result;
+ if (Result !="")
+ return RemoveNewlines(Result);
return MatchBufferForText(file,Buffer1Value);
}
std::string BrukerDataSet::GetContentType(std::string& file)
{
- std::string ValuesPart, Result;
+ std::string ValuesPart;
+ boost::match_flag_type flags = boost::match_default;
+ std::string::const_iterator start, end;
ValuesPart=GetValuesPart(file);
- if (BoolMatchBufferForText(ValuesPart,IntSeries))
- return "int";
- if (BoolMatchBufferForText(ValuesPart,FloatSeries))
- return "float";
- return "string";
+ start=ValuesPart.begin();
+ end=ValuesPart.end();
+ // boost regexp_match can not handle well what we want
+ // so instead of looking for a match we will seek proof of a non int serie
+ // i.e. check if we can find something else than than -0-9
+ boost::regex isNotIntSerie("[^ \\-0-9]");
+ boost::match_results<std::string::const_iterator> whatInt;
+ if (!regex_search(start,end, whatInt, isNotIntSerie,flags))
+ return "int";
+
+ // if not int serie check if it's not a floats serie !!!
+
+ boost::regex isNotFloatSerie("[^ \\-\\+\\.eE0-9]");
+ boost::match_results<std::string::const_iterator> whatFloat;
+ if (!regex_search(start,end, whatFloat, isNotFloatSerie,flags))
+ return "float";
+
+ // if not a float serie neither, it's a string !!!
+ return "string";
}