有人可以告诉我如何使用Matlab将字符数组转换为格式化输出吗?
我期待这样的数据:
CHAR (1 x 29) : 0.050822999 3.141592979 ; (1)
OR
CELL (1 x 1) or string: '0.050822999 3.141592979 ; (1)'
我正在寻找这样的输出:
d1 = 0.050822999; %double
d2 = 3.141592979; %double
index = 1; % integer
我尝试了转置然后使用str2num(Str');但是,它正在给我返回0x 0 double。
任何帮助都将不胜感激。
此致 DK
答案 0 :(得分:3)
您可以使用regexp
来解析字符串
c = { '0.050822999 3.141592979 ; (1)' };
p = regexp( c{1}, '^(\d+\.\d+)\s(\d+\.\d+)\s*;\s*\((\d+)\)$', 'tokens', 'once' ); %//parse the input string
numbers = str2mat(p); %// convert extracted strings to numerical values
示例结果
ans =
0.050822999
3.141592979
1
解释regexp
模式:
^
- 模式从输入字符串的开头(\d+\.\d+)
- 包含此子图案的括号('()'
)表示它是单个标记\d+
匹配一个或多个数字,然后期望\.
一个点(注意\
,因为regexp中的.
充当通配符)和点{{1}之后预计会有一个或多个数字
此令牌应对应于第一个数字,例如\d+
0.050822999
期待一个空格\s
- 再次,期待另一个小数部分作为第二个标记。(\d+\.\d+)
- 期待空格(零或更多)。\s*
- 捕获表达式中的;
,但不作为令牌。;
- 期待空格(零或更多)。\s+
- 期望一个左括号,请注意\(
,因为regexp中的括号用于表示标记。\
- 期望一个或多个数字作为第三个标记,此处只需要整数。没有小数点。(\d+)
- 期待一个右括号。\)
- 模式应该到达输入字符串的末尾。 答案 1 :(得分:2)
你可以使用这样的东西(如果我理解正确的话)
function str_dump(var)
info = whos;
disp([info.class ' ' mat2str(info.size) ' : ' var]);
end
这只显示有关字符串的信息。如果你想解析它并转换成另一个Matlab的结构,你必须更仔细地解释它。
答案 2 :(得分:2)
%// Input
a = [0.050822999 3.141592979];
n = 1;
%// Output
str = [num2str(a,'%0.9f ') ' ; (' num2str(n) ')']
结果:
str =
0.050822999 3.141592979 ; (1)