#include #include using namespace std; bool isNumber(char c) { switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return true; break; default: return false; }; } int main(int argc, char** argv) { if (argc != 2) return 0; string c(argv[1]); //get the year, month and day from the path. string year, month, day; string runnumber; string serviceName; int count = c.size()-5; while (count >= 0) { if (c[count+0] == '2' && c[count+1] == '0' && c[count+2] == '1' && c[count+3] == '1' && c[count+4] == '/') { year = "2011"; month = c.substr(count+5, 2); day = c.substr(count+8, 2); break; } count--; } //separate the runnumber from the rest of the filename count = c.size()-6; while (count >= 0) { if (c[count] == '_') { if (isNumber(c[count+1]) && isNumber(c[count+2]) && isNumber(c[count+3])) { runnumber=c.substr(count+1, 3); break; } } else { if (c[count+0] != '0' && c[count+1] == '0' && c[count+2] == '0' && c[count+3] == '0' && c[count+4] == '0' && c[count+5] == '0') { runnumber=c.substr(count+6, 3); break; } } count--; } //figure out the service name count = c.size()-3; while (count > 0) { if ((c[count] == '_' || c[count] == '.') && !isNumber(c[count+1]) && isNumber(c[count-1])) { serviceName = c.substr(count+1, c.size()-(count+6)); } count--; } if (serviceName == "fits") serviceName = ""; cout << year << month << day; if (runnumber != "") cout << "_"; cout << runnumber; if (serviceName != "") cout << "."; cout << serviceName << ".fits"; // cout << "year: " << year << " month: " << month << " day: " << day << endl; // cout << "run number: " << runnumber << " service name: " << serviceName << endl; return 0; }