diff --git a/actions/actiontsc.h b/actions/actiontsc.h index 0aa5c15..0c951f1 100644 --- a/actions/actiontsc.h +++ b/actions/actiontsc.h @@ -50,12 +50,12 @@ template MString ActionTSC::DoAction(const CLArgs& args, D& ds) if(!data) return "Can't read data"; if(!data.Unit().Exist()) michlib::errmessage("Unknown measurement unit!"); - MString outfmt = args.contains("format") ? args.at("format") : "bin"; + MString name = args.contains("out") ? args.at("out") : "out.bin"; + MString outfmt = args.contains("format") ? args.at("format") : (GetExt(name) == "nc" ? "nc" : "bin"); if(outfmt == "bin") { - BFileW fw; - MString name = args.contains("out") ? args.at("out") : "out.bin"; + BFileW fw; fw.Create(name, 3); fw.SetColumnName(1, "Longitude"); @@ -75,7 +75,6 @@ template MString ActionTSC::DoAction(const CLArgs& args, D& ds) if(outfmt == "nc" || outfmt == "netcdf") { - MString name = args.contains("out") ? args.at("out") : "out.nc"; int ret; int ncid, dimid, dimidxy[2]; int lonid, latid, vid; diff --git a/include/ParseArgs.h b/include/ParseArgs.h index 0932c88..d286093 100644 --- a/include/ParseArgs.h +++ b/include/ParseArgs.h @@ -6,3 +6,4 @@ using michlib::SList; using CLArgs = std::map; CLArgs ParseArgs(int argc, char** argv); +MString GetExt(const MString& fname); diff --git a/src/ParseArgs.cpp b/src/ParseArgs.cpp index 05dc4b1..5bbe757 100644 --- a/src/ParseArgs.cpp +++ b/src/ParseArgs.cpp @@ -33,3 +33,10 @@ CLArgs ParseArgs(int argc, char** argv) return out; } + +MString GetExt(const MString& fname) +{ + for(size_t i = fname.Len(); i != 0; i--) + if(fname[i - 1] == '.') return fname.SubStr(i + 1, fname.Len() - i); + return ""; +}