13 #include "eckit/filesystem/PathName.h"
14 #include "eckit/log/Log.h"
15 #include "eckit/utils/Tokenizer.h"
23 using namespace eckit;
29 SetTool::SetTool (
int argc,
char *parameters[]) :
Tool(argc, parameters) { }
41 std::vector<std::string>
columns;
42 std::vector<double> values;
58 Setter setter(sourceIt, sourceEnd,
columns, values);
59 Setter::iterator begin = setter.begin();
60 const Setter::iterator end = setter.end();
66 Tokenizer splitAssignments(
",");
67 std::vector<std::string> assignments;
68 splitAssignments(s, assignments);
70 Tokenizer splitEq(
"=");
72 for (
size_t i = 0;
i < assignments.size(); ++
i)
74 std::vector<std::string> assignment;
75 splitEq(assignments[
i], assignment);
76 ASSERT(assignment.size() == 2);
78 std::string colName = assignment[0];
79 std::string value = assignment[1];
81 Log::info() <<
"SetTool::parseUpdateList: " << colName <<
"='" << value <<
"'" << std::endl;
85 if (value.find(
"0x") != 0)
89 value = value.substr(2);
90 ASSERT(
"Format of the hexadecimal value is not correct" && (value.size() % 2) == 0);
91 ASSERT(
"Hexadecimal literal is too long" && (value.size() / 2) <=
sizeof(
double));
93 bzero(&v,
sizeof(
double));
94 for (
size_t i = 0;
i < value.size() / 2; ++
i)
96 std::string byteInHex = value.substr(
i * 2, 2);
99 reinterpret_cast<unsigned char*
>(&v)[
i] = x =
static_cast<unsigned char>(strtoul(byteInHex.c_str(), &p, 16));
100 Log::debug() <<
"SetTool::parseUpdateList: '" << byteInHex <<
"' => " << x << std::endl;
const iterator end() const
iterator begin(bool openDataHandle=true)