Michael Uleysky
2 years ago
5 changed files with 261 additions and 155 deletions
@ -0,0 +1,36 @@
|
||||
#define MICHLIB_NOSOURCE |
||||
#include "GPL.h" |
||||
#include "odm.h" |
||||
|
||||
int actioninfo(const CLArgs& args) |
||||
{ |
||||
if(!args.contains("source")) |
||||
{ |
||||
errmessage("No source specified!"); |
||||
return 1; |
||||
} |
||||
|
||||
Data data; |
||||
|
||||
if(args.at("source") == "NEMO") |
||||
{ |
||||
NEMOData ndata = NEMOOpen(args); |
||||
|
||||
if(!ndata) |
||||
{ |
||||
errmessage("Can't open NEMO dataset"); |
||||
return 1; |
||||
} |
||||
|
||||
data = DataVariants(std::move(ndata)); |
||||
} |
||||
else |
||||
{ |
||||
errmessage("Unknown source " + args.at("source")); |
||||
return 1; |
||||
} |
||||
|
||||
message(data.Info()); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,133 @@
|
||||
#define MICHLIB_NOSOURCE |
||||
#include "GPL.h" |
||||
#include "odm.h" |
||||
|
||||
int actiontsc(const CLArgs& args) |
||||
{ |
||||
if(!args.contains("source")) |
||||
{ |
||||
errmessage("No source specified!"); |
||||
return 1; |
||||
} |
||||
|
||||
VarType vtype(args.at("var")); |
||||
if(!vtype) |
||||
{ |
||||
errmessage("Incorrect or no variable specified"); |
||||
return 1; |
||||
} |
||||
|
||||
michlib_internal::ParameterListEx pars; |
||||
pars.UsePrefix(""); |
||||
|
||||
pars.SetParameter("source", args.at("source")); |
||||
pars.SetParameter("variable", vtype.Name()); |
||||
|
||||
Data data; |
||||
|
||||
if(args.at("source") == "NEMO") |
||||
{ |
||||
if(!vtype.isSupported<NEMOData>()) |
||||
{ |
||||
errmessage("Variable " + args.at("var") + " is unsupported by NEMO"); |
||||
return 1; |
||||
} |
||||
|
||||
NEMOData ndata = NEMOOpen(args); |
||||
if(!ndata) |
||||
{ |
||||
errmessage("Can't open NEMO dataset"); |
||||
return 1; |
||||
} |
||||
|
||||
size_t layer = 0; |
||||
if(args.contains("layer")) layer = args.at("layer").ToInteger<size_t>(); |
||||
if(!args.contains("depth") && layer >= ndata.NDepths()) |
||||
{ |
||||
errmessage(MString("Layer ") + layer + " is too deep!"); |
||||
return 1; |
||||
} |
||||
real depth = args.contains("depth") ? args.at("depth").ToReal() : ndata.Depth(layer); |
||||
|
||||
if(!(args.contains("lonb") && args.contains("lone") && args.contains("latb") && args.contains("late"))) |
||||
{ |
||||
errmessage("Region not specified (lonb, lone, latb, late)"); |
||||
return 1; |
||||
} |
||||
if(!ndata.SetRegion(args.at("lonb").ToReal(), args.at("lone").ToReal(), args.at("latb").ToReal(), args.at("late").ToReal(), depth)) |
||||
{ |
||||
errmessage("Can't set region"); |
||||
return 1; |
||||
} |
||||
|
||||
pars.SetParameter("depth", depth); |
||||
pars.SetParameter("layer", ndata.Layer()); |
||||
pars.SetParameter("dataset", ndata.Title()); |
||||
pars.SetParameter("lonb", args.at("lonb").ToReal()); |
||||
pars.SetParameter("latb", args.at("latb").ToReal()); |
||||
pars.SetParameter("lone", args.at("lone").ToReal()); |
||||
pars.SetParameter("late", args.at("late").ToReal()); |
||||
|
||||
data = DataVariants(std::move(ndata)); |
||||
} |
||||
else |
||||
{ |
||||
errmessage("Unknown source " + args.at("source")); |
||||
return 1; |
||||
} |
||||
|
||||
if(args.contains("time") && (args.contains("timeb") || args.contains("timee"))) |
||||
{ |
||||
errmessage("Time must be set via time parameter or timeb and timee parameter but not via both"); |
||||
return 1; |
||||
} |
||||
|
||||
if(!(args.contains("time") || (args.contains("timeb") && args.contains("timee")))) |
||||
{ |
||||
errmessage("Time must be set via time parameter or timeb and timee parameter"); |
||||
return 1; |
||||
} |
||||
|
||||
BFileW fw; |
||||
MString name = args.at("out"); |
||||
if(!name.Exist()) name = "out.bin"; |
||||
|
||||
fw.Create(name, 3); |
||||
/*
|
||||
if(!fw.Create(name,3)) |
||||
{ |
||||
errmessage("Can't create file "+name); |
||||
return 1; |
||||
} |
||||
*/ |
||||
fw.SetParameters(pars); |
||||
fw.UsePrefix(""); |
||||
|
||||
if(args.contains("time")) |
||||
{ |
||||
MDateTime time; |
||||
if(time.FromString(args.at("time"))) // One date
|
||||
{ |
||||
auto it = GetTIndex(data, time); |
||||
fw.SetParameter("time", data.Time(it).ToString()); |
||||
data.Write(fw, vtype, std::vector<size_t>(1, it)); |
||||
} |
||||
else // Regular expression
|
||||
{ |
||||
fw.SetParameter("timeregex", args.at("time")); |
||||
data.Write(fw, vtype, GetTIndexes(data, args.at("time"))); |
||||
} |
||||
} |
||||
else // Bdate, edate
|
||||
{ |
||||
MDateTime tb(args.at("timeb")), te(args.at("timee")); |
||||
fw.SetParameter("timeb", tb.ToString()); |
||||
fw.SetParameter("timee", te.ToString()); |
||||
data.Write(fw, vtype, GetTIndexes(data, tb, te)); |
||||
} |
||||
|
||||
fw.Finalize(); |
||||
fw.Close(); |
||||
|
||||
return 0; |
||||
} |
Loading…
Reference in new issue