13 #include "eckit/filesystem/PathName.h"
14 #include "eckit/io/FileHandle.h"
15 #include "eckit/log/Log.h"
16 #include "eckit/utils/StringTools.h"
17 #include "eckit/sql/SQLParser.h"
18 #include "eckit/sql/SQLSession.h"
19 #include "eckit/sql/SQLStatement.h"
27 using namespace eckit;
36 ImportTool::ImportTool(
int argc,
char *parameters[])
37 :
Tool(argc, parameters)
44 o <<
"Imports data from a text file";
49 <<
"\t[-d delimiter] <input.file> <output.file>" << std::endl
51 <<
"\tdelimiter can be a single character (e.g.: ',') or TAB. As a data example:" << std::endl
53 <<
"\tcol1:INTEGER,col2:REAL" << std::endl
54 <<
"\t1,2.0" << std::endl
55 <<
"\t3,4.0" << std::endl;
72 Log::info() <<
"ImportTool::run: inFile: " << inFile <<
", outFile: " << outFile << std::endl;
75 delimiter = delimiter ==
"TAB" ?
"\t"
76 : delimiter ==
"SPACE" ?
" "
79 std::string sql (
optionArgument(
"-sql", std::string(
"select *;")));
81 if (sql ==
"select *;") {
82 FileHandle dh_in(inFile);
83 FileHandle dh_out(outFile);
85 AutoClose close_in(dh_in);
86 dh_out.openForWrite(0);
87 AutoClose close_out(dh_out);
89 Log::info() <<
"ImportTool::odbFromCSV: Copied " << n <<
" rows." << std::endl;
106 eckit::sql::SQLDatabase& db(session.currentDatabase());
108 session.currentDatabase();
110 eckit::sql::SQLParser().parseString(session, sql);
111 size_t n = session.statement().execute();
113 Log::info() <<
"ImportTool::importFile: Copied " << n <<
" rows." << std::endl;
size_t odbFromCSV(DataHandle &dh_in, DataHandle &dh_out, const std::string &delimiter)
odbFromCSV returns number of lines imported