Matlab:如何将字符数组或字符串转换为格式化输出或解析字符串

时间:2014-10-01 06:15:59

标签: matlab cell

有人可以告诉我如何使用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

3 个答案:

答案 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)