X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Fsrc1%2Fbrukerdataset.cpp;h=affe61c6eb68f0a7e9bf6912921b50fc5a878897;hb=8c9faa21443792c8fbc6ffcc723ba300d733871e;hp=cc305d7d02554f7a56280f55ff7a9ea902f7edc7;hpb=3903199afabfd3d37c736371e608af8adae44ada;p=creaBruker.git diff --git a/lib/src1/brukerdataset.cpp b/lib/src1/brukerdataset.cpp index cc305d7..affe61c 100644 --- a/lib/src1/brukerdataset.cpp +++ b/lib/src1/brukerdataset.cpp @@ -67,11 +67,42 @@ bool BrukerDataSet::BoolMatchBufferForText(std::string& file, const boost::regex { 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 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 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) { @@ -144,21 +175,37 @@ std::string BrukerDataSet::GetValuesPart(std::string& file) { 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 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 whatFloat; + if (!regex_search(start,end, whatFloat, isNotFloatSerie,flags)) + return "float"; + + // if not a float serie neither, it's a string !!! + return "string"; }