如何解决MATLAB自动生成的函数可输入变量而不是.txt文件
MATALB的“导入数据”功能自动生成一个输入.txt文件并输出表的功能。此函数的前几行如下所示:
@RequestScope
class RequestContext {
private String requestId;
private String traceId;
private String authorisedId;
private String routeName;
// few more fields
@Inject RequestContext(SecurityContext securityContext) {
this.requestId = UUID.randomUUID().toString();
if(securityService.getAuthentication().isPresent()){
this.authorisedId = (securityService
.getAuthentication().get()).getUserId().toString();
}
}
/* to be updated in controller method interceptors */
public void updateRouteName(String name){
this.routeName = name;
}
但是,我需要此函数来输入变量,而不是将具有完全相同效果的.txt文件。我已经将所有数据以变量的形式存储在.txt文件中。我以为我可以简单地用变量替换using namespace sensor_msgs;
using namespace std;
void chatterCallback(const darknet_ros_3d_msgs::BoundingBoxes3d::ConstPtr& msg)
{
cout<<"Entering call back function" <<endl;
int person_count = 0;
int inc = 1;
while (msg->bounding_boxes[0].Class == "person" )
{
for(int count=0; count <= person_count; count++)
{
cout<<"Increment variable" << count <<endl;
const std::string PLANNING_GROUP = "crane_control";
moveit::planning_interface::MoveGroupInterface move_group(PLANNING_GROUP);
moveit::planning_interface::PlanningSceneInterface planning_scene_interface;
string str= to_string(count);
moveit_msgs::CollisionObject collision_object;
collision_object.header.frame_id = "world";
collision_object.id = "BOX_person__" + str;
cout<<"Person_BB:" << collision_object.id <<endl;
shape_msgs::SolidPrimitive primitive;
primitive.type = primitive.BOX;
primitive.dimensions.resize(3);
std::vector<float> array_xdim(inc);
std::vector<float> array_ydim(inc);
std::vector<float> array_zdim(inc);
array_xdim[inc] = msg->bounding_boxes[0].xmax - msg->bounding_boxes[0].xmin;
array_ydim[inc] = msg->bounding_boxes[0].ymax - msg->bounding_boxes[0].ymin;
array_zdim[inc] = msg->bounding_boxes[0].zmax - msg->bounding_boxes[0].zmin;
cout<<"dimx:" << array_xdim[inc] <<endl;
cout<<"dimy:" << array_ydim[inc] <<endl;
cout<<"dimz:" << array_zdim[inc] <<endl;
primitive.dimensions[0] = array_xdim[inc];
primitive.dimensions[1] = array_ydim[inc];
primitive.dimensions[2] = array_zdim[inc];
geometry_msgs::Pose box_pose;
std::vector<float> array_xpos(inc);
std::vector<float> array_ypos(inc);
std::vector<float> array_zpos(inc);
array_xpos[inc] = (msg->bounding_boxes[0].xmax + msg->bounding_boxes[0].xmin)/2;
array_ypos[inc] = (msg->bounding_boxes[0].ymax + msg->bounding_boxes[0].ymin)/2;
array_zpos[inc] = (msg->bounding_boxes[0].zmax + msg->bounding_boxes[0].zmin)/2;
box_pose.position.x = array_xpos[inc];
box_pose.position.y = array_ypos[inc];
box_pose.position.z = array_zpos[inc];
box_pose.orientation.w = 1.0;
cout<<"position_x:" << box_pose.position.x <<endl;
cout<<"position_y:" << box_pose.position.y <<endl;
cout<<"position_z:" << box_pose.position.z <<endl;
collision_object.primitives.push_back(primitive);
collision_object.primitive_poses.push_back(box_pose);
collision_object.operation = collision_object.ADD;
std::vector<moveit_msgs::CollisionObject> collision_objects;
collision_objects.push_back(collision_object);
planning_scene_interface.applyCollisionObjects(collision_objects);
cout<<"count:" << count <<endl;
}
inc++;
person_count++;
cout<<"Person count" << person_count <<endl;
}
cout<<"Exiting call back function" <<endl;
}
int main(int argc,char** argv)
{
ros::init(argc,argv,"cpp_subscriber");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("/darknet_ros_3d/bounding_boxes",50,chatterCallback);
ros::spin();
return 0;
}
,然后删除function output= myfunction(filename)
delimiter = {';','='};
%% Read columns of data as text:
formatSpec = '%s%s%s%s%s%s%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
dataArray = textscan(fileID,formatSpec,'Delimiter',delimiter,'TextType','string','ReturnOnError',false);
%% Close the text file.
fclose(fileID);
和filename
行代码,但这是行不通的。
解决方法
在循环中使用此自动生成的功能循环遍历您拥有的文件(名称)
% path to folder with txt-files
pFlr = pwd; % path to working directory
Lst = dir( fullfile(pFldr,'*.txt') ); % only get txt-files
for i = 1:length(Lst)
% path to file
pFl = fullfile( Lst(i).folder,Lst(i).name );
% read file by calling the auto-generated function
Dat1 = myfunction( pFl );
end
通过这种方式,您可以循环访问所有文件,例如将数据存储在表中:
k = 1; % control variable
for i = 1:length(Lst)
% path to file
pFl = fullfile( Lst(i).folder,Lst(i).name );
% read file by calling the auto-generated function
Dat1 = myfunction( pFl );
% do something with this data,e.g. store it
if i == 1 % allocate data if
Dat = Dat1;
% extend for allocation
vSz= height(Dat1)*length(Lst);
Dat(vSz,:) = Dat1(1,:); % assign the first row of the first table to the last row of the allocated table to expand it
else
Dat(k:k+size(Dat1)-1,:) = Dat1;
end
k = k + size(Dat1);
end
% crop table
Dat = Dat(1:k-1,:);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。