+/**
+ * \brief Allow user to build is own File Identifier (to be able to sort
+ * temporal series just as he wants)
+ * Criterions will be set with AddSeriesDetail.
+ * (Maybe the method should be moved elsewhere
+ * -File class? FileHelper class?-
+ * @return FileIdentifier (Tokenizable on '_')
+ */
+std::string SerieHelper::CreateUserDefinedFileIdentifier( File * inFile )
+{
+ // Deal with all user supplied tags.
+ // (user knows more than we do about his images!)
+
+ float converted;
+ std::string id;
+ std::string s;
+ char charConverted[17];
+
+ for(SeriesExDetails::iterator it2 = ExDetails.begin();
+ it2 != ExDetails.end();
+ ++it2)
+ {
+ const ExDetail &r = *it2;
+ s = inFile->GetEntryString( r.group, r.elem );
+
+ // User is allowed to ask 'convertion', to allow further ordering
+ // e.g : 100 would be *before* 20; 000020.00 vs 00100.00 : OK
+ if (it2->convert)
+ {
+ converted = atof(s.c_str());
+ // probabely something much more complicated is possible,
+ // using C++ features
+ /// \todo check the behaviour when there are >0 and <0 numbers
+ sprintf(charConverted, "%016.6f",converted);
+ s = charConverted;
+ }
+ // Eliminate non-alphanum characters, including whitespace.
+ for(unsigned int i=0; i<s.size(); i++)
+ {
+ while(i<s.size()
+ && !( s[i] == '.' || s[i] == '-'
+ || (s[i] >= 'a' && s[i] <= 'z')
+ || (s[i] >= '0' && s[i] <= '9')
+ || (s[i] >= 'A' && s[i] <= 'Z')))
+ {
+ s.erase(i, 1);
+ }
+ }
+
+ id += s.c_str();
+ id += "_"; // make the FileIdentifier Tokenizable
+ }
+
+ return id;
+}