FileFormat WaypointLoaderNode::checkFileFormat(const char *filename) { std::ifstream ifs(filename); if (!ifs) { return FileFormat::unknown; } // get first line std::string line; std::getline(ifs, line); // parse first line std::vector<std::string> parsed_columns; parseColumns(line, &parsed_columns); // check if first element in the first column does not include digit if (!std::any_of(parsed_columns.at(0).cbegin(), parsed_columns.at(0).cend(), isdigit)) { return FileFormat::ver3; } // if element consists only digit int num_of_columns = countColumns(line); ROS_INFO("columns size: %d", num_of_columns); return ( num_of_columns == 3 ? FileFormat::ver1 // if data consists "x y z (velocity)" : num_of_columns == 4 ? FileFormat::ver2 // if data consists "x y z yaw (velocity) : FileFormat::unknown ); }
void WaypointLoaderNode::publishLaneArray() { // extract file paths std::vector<std::string> multi_file_path; parseColumns(multi_lane_csv_, &multi_file_path); autoware_msgs::LaneArray lane_array; createLaneArray(multi_file_path, &lane_array); lane_pub_.publish(lane_array); }
void WaypointLoaderNode::parseWaypointForVer1(const std::string &line, autoware_msgs::waypoint *wp) { std::vector<std::string> columns; parseColumns(line, &columns); wp->pose.pose.position.x = std::stod(columns[0]); wp->pose.pose.position.y = std::stod(columns[1]); wp->pose.pose.position.z = std::stod(columns[2]); wp->twist.twist.linear.x = kmph2mps(std::stod(columns[3])); }
void WaypointLoaderNode::parseWaypointForVer2(const std::string &line, autoware_msgs::waypoint *wp) { std::vector<std::string> columns; parseColumns(line, &columns); wp->pose.pose.position.x = std::stod(columns[0]); wp->pose.pose.position.y = std::stod(columns[1]); wp->pose.pose.position.z = std::stod(columns[2]); wp->pose.pose.orientation = tf::createQuaternionMsgFromYaw(std::stod(columns[3])); wp->twist.twist.linear.x = kmph2mps(std::stod(columns[4])); }
ColumnsDescription InterpreterCreateQuery::getColumnsDescription(const ASTExpressionList & columns, const Context & context) { ColumnsDescription res; auto && columns_and_defaults = parseColumns(columns, context); res.materialized = removeAndReturnColumns(columns_and_defaults, ColumnDefaultKind::Materialized); res.aliases = removeAndReturnColumns(columns_and_defaults, ColumnDefaultKind::Alias); res.ordinary = std::move(columns_and_defaults.first); res.defaults = std::move(columns_and_defaults.second); if (res.ordinary.size() + res.materialized.size() == 0) throw Exception{"Cannot CREATE table without physical columns", ErrorCodes::EMPTY_LIST_OF_COLUMNS_PASSED}; return res; }
void MemDbLoader::parseTable(const QDomElement & elemSource) { _tableName = elemSource.attribute("name"); _columnNames.clear(); QDomNodeList nlist = elemSource.childNodes(); for(int i = 0; i < nlist.count(); i++ ) { QDomElement it = nlist.item(i).toElement(); if(it.tagName()=="columns") { parseColumns(it); } else if(it.tagName()=="record") { parseRecord(it); } } }
InterpreterCreateQuery::ColumnsInfo InterpreterCreateQuery::getColumnsInfo( const ASTPtr & columns, const Context & context) { ColumnsInfo res; auto && columns_and_defaults = parseColumns(columns, context); res.materialized_columns = removeAndReturnColumns(columns_and_defaults, ColumnDefaultType::Materialized); res.alias_columns = removeAndReturnColumns(columns_and_defaults, ColumnDefaultType::Alias); res.columns = std::make_shared<NamesAndTypesList>(std::move(columns_and_defaults.first)); res.column_defaults = std::move(columns_and_defaults.second); if (res.columns->size() + res.materialized_columns.size() == 0) throw Exception{"Cannot CREATE table without physical columns", ErrorCodes::EMPTY_LIST_OF_COLUMNS_PASSED}; return res; }
void WaypointLoaderNode::parseWaypoint(const std::string &line, const std::vector<std::string> &contents, autoware_msgs::waypoint *wp) { std::vector<std::string> columns; parseColumns(line, &columns); std::unordered_map<std::string, std::string> map; for (size_t i = 0; i < contents.size(); i++) { map[contents.at(i)] = columns.at(i); } wp->pose.pose.position.x = std::stod(map["x"]); wp->pose.pose.position.y = std::stod(map["y"]); wp->pose.pose.position.z = std::stod(map["z"]); wp->pose.pose.orientation = tf::createQuaternionMsgFromYaw(std::stod(map["yaw"])); wp->twist.twist.linear.x = kmph2mps(std::stod(map["velocity"])); wp->change_flag = std::stoi(map["change_flag"]); }
void WaypointLoaderNode::loadWaypoints(const char *filename, std::vector<autoware_msgs::waypoint> *wps) { std::ifstream ifs(filename); if (!ifs) return; std::string line; std::getline(ifs, line); // get first line std::vector<std::string> contents; parseColumns(line, &contents); std::getline(ifs, line); // remove second line while (std::getline(ifs, line)) { autoware_msgs::waypoint wp; parseWaypoint(line, contents, &wp); wps->push_back(wp); } planningVelocity(&*wps); }
Piecewise::Piecewise(const InputParameters & parameters) : Function(parameters), _scale_factor(getParam<Real>("scale_factor")), _has_axis(false), _data_file_name(getParam<FileName>("data_file")), _x_index(getParam<unsigned int>("x_index_in_file")), _y_index(getParam<unsigned int>("y_index_in_file")), _xy_only(getParam<bool>("xy_in_file_only")) { std::vector<Real> x; std::vector<Real> y; if (_data_file_name != "") { if ((parameters.isParamValid("x")) || (parameters.isParamValid("y")) || (parameters.isParamValid("xy_data"))) { mooseError("In Piecewise " << _name << ": Cannot specify 'data_file' and 'x', 'y', or 'xy_data' together."); } if (_x_index == _y_index) mooseError("In Piecewise " << _name << ": 'x_index_in_file' and 'y_index_in_file' are set to the same value."); std::string format = getParam<std::string>("format"); if (format.compare(0, 4, "rows")==0) { parseRows( x, y ); } else if (format.compare(0, 7, "columns")==0) { parseColumns( x, y); } else { mooseError("In Piecewise " << _name << ": Invalid option for format: "+format+" in "+name()+". Valid options are 'rows' and 'columns'."); } } else if ((parameters.isParamValid("x")) || (parameters.isParamValid("y"))) { if (! ((parameters.isParamValid("x")) && (parameters.isParamValid("y")))) { mooseError("In Piecewise " << _name << ": Both 'x' and 'y' must be specified if either one is specified."); } if (parameters.isParamValid("xy_data")) { mooseError("In Piecewise " << _name << ": Cannot specify 'x', 'y', and 'xy_data' together."); } x = getParam<std::vector<Real> >("x"); y = getParam<std::vector<Real> >("y"); } else if (parameters.isParamValid("xy_data")) { std::vector<Real> xy = getParam<std::vector<Real> >("xy_data"); unsigned int xy_size = xy.size(); if (xy_size % 2 != 0) { mooseError("In Piecewise " << _name << ": Length of data provided in 'xy_data' must be a multiple of 2."); } unsigned int x_size = xy_size/2; x.reserve(x_size); y.reserve(x_size); for (unsigned int i=0; i<xy_size/2; ++i) { x.push_back(xy[i*2]); y.push_back(xy[i*2+1]); } } else { mooseError("In Piecewise " << _name << ": Either 'data_file', 'x' and 'y', or 'xy_data' must be specified."); } try { _linear_interp.reset(new LinearInterpolation(x, y)); } catch (std::domain_error & e) { mooseError("In Piecewise " << _name << ": " << e.what()); } if (parameters.isParamValid("axis")) { _axis=parameters.get<int>("axis"); if (_axis < 0 || _axis > 2) mooseError("In Piecewise " << _name << ": axis="<<_axis<<" outside allowable range (0-2)."); _has_axis = true; } }
void CSVDocument::load(const std::string& oFile, bool bWithHeader /* = true */, int *errorRow /* = NULL */, int *errorCol /* = NULL */) { std::ifstream oStream(oFile.c_str(), std::ios::in) ; if (!oStream.is_open()) { printf("打开文件失败: %s\n", oFile.c_str()); return; } std::vector<std::string> stringList; char sBuff[1024]; while (!oStream.eof()) { memset(sBuff, 0, sizeof(sBuff)); oStream.getline(sBuff, sizeof(sBuff)); if (sBuff[0] != '\0') { int len = (int)strlen(sBuff); if (sBuff[len - 1] == '\r') sBuff[len - 1] = '\0'; stringList.push_back(sBuff); } } //首先清空现有数据 clearColumnObject(); //文档为空,没有数据则退出 if (stringList.size() <= 0) return; //从第1行分析列名称表,分隔符是"," parseColumns(stringList[1], ','); //循环读取数据并添加到每个列对象 const int rowCount = (int)stringList.size(); m_dwRowNum = 0; int hadErrCol = 0; int nStartRow = bWithHeader ? 1 : 0; for (int i = nStartRow; i < rowCount; ++i) { if (parseRow(stringList[i], ',', &hadErrCol)) { m_dwRowNum++; } if (hadErrCol != 0) { if (errorRow && errorCol) { *errorCol = hadErrCol; *errorRow = i; return; } else assert(false); } } #ifdef _DEBUG for (size_t i = 0; i < m_dwColNum; ++i) { if ((int)m_dwRowNum != m_ColumnList[i]->size()) { if (errorCol) { *errorCol = (int)i; return; } else { assert(false); } } } #endif }
void ODBCHandler::handleRequest(Poco::Net::HTTPServerRequest & request, Poco::Net::HTTPServerResponse & response) { Poco::Net::HTMLForm params(request, request.stream()); LOG_TRACE(log, "Request URI: " + request.getURI()); auto process_error = [&response, this](const std::string & message) { response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); if (!response.sent()) response.send() << message << std::endl; LOG_WARNING(log, message); }; if (!params.has("query")) { process_error("No 'query' in request body"); return; } if (!params.has("columns")) { process_error("No 'columns' in request URL"); return; } if (!params.has("connection_string")) { process_error("No 'connection_string' in request URL"); return; } UInt64 max_block_size = DEFAULT_BLOCK_SIZE; if (params.has("max_block_size")) { std::string max_block_size_str = params.get("max_block_size", ""); if (max_block_size_str.empty()) { process_error("Empty max_block_size specified"); return; } max_block_size = parse<size_t>(max_block_size_str); } std::string columns = params.get("columns"); std::unique_ptr<Block> sample_block; try { sample_block = parseColumns(std::move(columns)); } catch (const Exception & ex) { process_error("Invalid 'columns' parameter in request body '" + ex.message() + "'"); LOG_WARNING(log, ex.getStackTrace().toString()); return; } std::string format = params.get("format", "RowBinary"); std::string query = params.get("query"); LOG_TRACE(log, "Query: " << query); std::string connection_string = params.get("connection_string"); LOG_TRACE(log, "Connection string: '" << connection_string << "'"); WriteBufferFromHTTPServerResponse out(request, response, keep_alive_timeout); try { BlockOutputStreamPtr writer = FormatFactory::instance().getOutput(format, out, *sample_block, *context); auto pool = getPool(connection_string); ODBCBlockInputStream inp(pool->get(), query, *sample_block, max_block_size); copyData(inp, *writer); } catch (...) { auto message = getCurrentExceptionMessage(true); response.setStatusAndReason( Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); // can't call process_error, bacause of too soon response sending writeStringBinary(message, out); tryLogCurrentException(log); } }
// DEPRECATED CONSTRUCTOR Piecewise::Piecewise(const std::string & deprecated_name, InputParameters parameters) : Function(deprecated_name, parameters), _scale_factor( getParam<Real>("scale_factor") ), _linear_interp( NULL ), _has_axis(false), _data_file_name(isParamValid("data_file") ? getParam<std::string>("data_file") : "") { std::vector<Real> x; std::vector<Real> y; if (_data_file_name != "") { if ((parameters.isParamValid("x")) || (parameters.isParamValid("y")) || (parameters.isParamValid("xy_data"))) { mooseError("In Piecewise: Cannot specify 'data_file' and 'x', 'y', or 'xy_data' together."); } std::string format = getParam<std::string>("format"); if (format.compare(0, 4, "rows")==0) { parseRows( x, y ); } else if (format.compare(0, 7, "columns")==0) { parseColumns( x, y); } else { mooseError("Invalid option for format: "+format+" in "+name()+". Valid options are 'rows' and 'columns'."); } } else if ((parameters.isParamValid("x")) || (parameters.isParamValid("y"))) { if (! ((parameters.isParamValid("x")) && (parameters.isParamValid("y")))) { mooseError("In Piecewise: Both 'x' and 'y' must be specified if either one is specified."); } if (parameters.isParamValid("xy_data")) { mooseError("In Piecewise: Cannot specify 'x', 'y', and 'xy_data' together."); } x = getParam<std::vector<Real> >("x"); y = getParam<std::vector<Real> >("y"); } else if (parameters.isParamValid("xy_data")) { std::vector<Real> xy = getParam<std::vector<Real> >("xy_data"); unsigned int xy_size = xy.size(); if (xy_size % 2 != 0) { mooseError("In Piecewise: Length of data provided in 'xy_data' must be a multiple of 2."); } unsigned int x_size = xy_size/2; x.reserve(x_size); y.reserve(x_size); for (unsigned int i=0; i<xy_size/2; ++i) { x.push_back(xy[i*2]); y.push_back(xy[i*2+1]); } } else { mooseError("In Piecewise: Either 'data_file', 'x' and 'y', or 'xy_data' must be specified."); } _linear_interp = new LinearInterpolation( x, y ); if (parameters.isParamValid("axis")) { _axis=parameters.get<int>("axis"); if (_axis < 0 || _axis > 2) mooseError("In Piecewise function axis="<<_axis<<" outside allowable range (0-2)."); _has_axis = true; } }