// ------------------------------------------------------------------------- // #include "tdm_reaper.hpp" #include #include #include #include // ------------------------------------------------------------------------- // const std::string gittag("TAGSTRING"); const std::string githash("HASHSTRING"); void show_usage() { std::cout<<"\n" <<"tdmripper ["< " <<"\n\n" <<"Options:" <<"\n\n" <<" -d, --output (existing!) output directory (default: current working directory)\n" <<" -f, --filenames filenaming rule using %C (channel index), %c (channel name),\n" <<" %G (group index), %g (group name) \n" <<" (default: --filenames=channel_%G_%C.csv )\n" <<" -s, --csvsep separator character used in .csv files (default is comma ',')\n" <<" -g, --listgroups list groups in data\n" <<" -c, --listchannels list channels in data\n" <<" -h, --help show this help message \n" <<" -v, --version display version\n" <<"\n"; } // ------------------------------------------------------------------------- // // define type of key-value map object typedef std::map optkeys; const std::string argmsg = std::string("both .tdm and .tdx file (and maybe any valid option) must be provided!"); const std::string arguse = std::string("see $ tdmripper --help for usage"); optkeys parse_args(int argc, char* argv[], bool showargs = false) { if ( showargs ) { std::cout<<"number of CLI-arguments: "<("invalidoption",argv[1])); return prsdkeys; } } else if ( argc > 2 ) // && argc%2 == 1 ) { // tdm file if ( std::string(argv[argc-2]).find(std::string(".tdm")) != std::string::npos ) { prsdkeys.insert(std::pair("tdm",argv[argc-2])); } else { std::string tdmerr = std::string(argv[argc-2]) + std::string(" does not look like a .tdm file") + std::string(", evtl. add file extension *.tdm") + std::string("\n") + arguse; std::cerr<("invalidoption",argv[argc-2])); return prsdkeys; } // tdx file if ( std::string(argv[argc-1]).find(std::string(".tdx")) != std::string::npos ) { prsdkeys.insert(std::pair("tdx",argv[argc-1])); } else { std::string tdxerr = std::string(argv[argc-1]) + std::string(" does not look like a .tdx file") + std::string(", evtl. add file extension *.tdx") + std::string("\n") + arguse; std::cerr<("invalidoption",argv[argc-1])); return prsdkeys; } // options (in any order) // for ( int i = 1; i < argc-2; i+=2 ) for ( int i = 1; i < argc-2; i++ ) { if ( std::string(argv[i]) == std::string("--output") || std::string(argv[i]) == std::string("-d") ) { prsdkeys.insert(std::pair("output",argv[i+1])); i += 1; } else if ( std::string(argv[i]) == std::string("--csvsep") || std::string(argv[i]) == std::string("-s") ) { prsdkeys.insert(std::pair("csvsep",argv[i+1])); i += 1; } else if ( std::string(argv[i]) == std::string("--filenames") || std::string(argv[i]) == std::string("-f") ) { prsdkeys.insert(std::pair("filenames",argv[i+1])); i += 1; } else if ( std::string(argv[i]) == std::string("--listgroups") || std::string(argv[i]) == std::string("-g") ) { prsdkeys.insert(std::pair("listgroups",argv[i+1])); } else if ( std::string(argv[i]) == std::string("--listchannels") || std::string(argv[i]) == std::string("-c") ) { prsdkeys.insert(std::pair("listchannels",argv[i+1])); } else { std::string argerr = std::string("unkown option '") + argv[i] + std::string("'"); std::cerr<("invalidoption",argv[i])); return prsdkeys; } } } else { std::cerr<(formatter)<<"\n"; std::cout<(formatter)<<"\n"; std::cout<(formatter)<<"\n"; // std::vector chgrids = jack.get_channelgroup_ids(); // for ( auto id: chgrids ) // { // // } std::vector chids = jack.get_channel_ids(); for ( auto id: chids ) { std::string filenam = std::string("channel_") + id + std::string(".dat"); // std::vector chdata = jack.get_channel(id); jack.print_channel(id,filenam.c_str(),true); } // print list of groups or channels to stdout // if ( listgroups ) jack.list_groups(); // if ( listchannels ) jack.list_channels(); // // write data to filesystem // if ( !listgroups && !listchannels ) // { // // declare filesystem path // std::filesystem::path pd = output; // // // check for given directory // if ( std::filesystem::is_directory(pd) ) // { // // print (group,channel) data // for ( int g = 0; g < jack.num_groups(); g++ ) // { // // get and sanitize group name // std::string grpnm = jack.group_name(g); // std::regex regg("([^A-Za-z0-9])"); // std::string grpname = std::regex_replace(grpnm,regg,""); // // for ( int c = 0; c < jack.no_channels(g); c++ ) // { // // get overall channel index/id // int chidx = jack.obtain_channel_id(g,c); // // // get and sanitize channel name // std::string chnm = jack.channel_name(g,c); // std::regex regc("([^A-Za-z0-9])"); // std::string chname = std::regex_replace(chnm,regc,""); // // // construct file name according to filenaming rule // std::string filenm = files; // filenm = std::regex_replace(files,std::regex("\\%C"),std::to_string(c+1)); // filenm = std::regex_replace(filenm,std::regex("\\%c"),chname); // filenm = std::regex_replace(filenm,std::regex("\\%G"),std::to_string(g+1)); // filenm = std::regex_replace(filenm,std::regex("\\%g"),grpname); // // // concat paths // std::filesystem::path outfile = pd / filenm; // // // write channel to filesystem // jack.print_channel(chidx,outfile.c_str()); // } // } // // // print meta data // jack.print_meta((pd / "meta-data.log").c_str()); // } // else // { // std::cerr<