コード例 #1
0
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
          );
}
コード例 #2
0
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);
}
コード例 #3
0
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]));
}
コード例 #4
0
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]));
}
コード例 #5
0
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;
}
コード例 #6
0
ファイル: memdbloader.cpp プロジェクト: Wushaowei001/xtuple
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);
        }
    }
}
コード例 #7
0
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;
}
コード例 #8
0
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"]);
}
コード例 #9
0
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);
}
コード例 #10
0
ファイル: Piecewise.C プロジェクト: Liuux/moose
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;
  }
}
コード例 #11
0
ファイル: CSVDocument.cpp プロジェクト: txal/XProject
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
}
コード例 #12
0
ファイル: MainHandler.cpp プロジェクト: shenqsdev/ClickHouse
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);
    }
}
コード例 #13
0
ファイル: Piecewise.C プロジェクト: raghavaggarwal/moose
// 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;
  }
}