2014-10-01 279 views
-1

有人能告诉我如何使用Matlab将字符数组转换为格式化输出?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(海峡“);但是,它返回给我0x 0双。

任何帮助,将不胜感激。

问候, DK

+1

请提供与实施例的输出的示例字符数组...或者是这些输入?如果他们不是说'CELL(1 x 1):...',可以更清楚地说'Str = {'0.050822999 3.141592979}',然后提供您期望的格式化输出 – Dan 2014-10-01 06:37:08

+1

您输入的是什么使用? – Nick 2014-10-01 07:01:28

回答

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模式:

  • ^ - PATT ERN开始于输入字符串
  • (\d+\.\d+)的开始 - 括号('()')包围此子模式指示它作为一个单一令牌
    \d+匹配一个或多个数字,则期待\.点(注意\,由于.在正则表达式中单独用作通配符)并且在点\d+之后期望一个或多个数字。
    此令牌应该对应于第一数量,例如,0.050822999
  • \s
  • (\d+\.\d+)期待一个单一的空间 - 再次,期待另一个小数作为第二令牌。
  • \s* - 期待空白(零或更多)。
  • ; - 在表达式中捕获;,但不是作为标记。
  • \s+ - 期待空白(零或更多)。
  • \( - 期待左括号,请注意\,因为正则表达式中的括号用于表示令牌。
  • (\d+) - 期待一个或多个数字作为第三个标记,这里只需要整数。没有小数点。
  • \) - 期待一个右括号。
  • $ - 模式应该到达输入字符串的末尾。
+0

谢谢。那工作。你能否请你解释正则表达式中的模式? – 2014-10-01 13:06:58

+0

@DushyantKumar请参阅我的更新。 – Shai 2014-10-01 17:51:38

+0

感谢您解释模式。 – 2014-10-02 07:18:36

2

您可以使用这样的事情(如果我理解正确的你)

function str_dump(var) 
    info = whos; 
    disp([info.class ' ' mat2str(info.size) ' : ' var]); 
end 

这只是显示了关于字符串信息。如果你想解析它并转换为另一个Matlab的结构,你必须更仔细地解释它。

+1

如果可以避免使用'eval',那么应该这样做,因为调试是一件非常可怕的事情。 – Nick 2014-10-01 07:00:43

+0

@Nick我已经修复它..从其他东西离开) – Cheery 2014-10-01 07:01:11

+0

这是更好:) – Nick 2014-10-01 07:02:13

2
%// Input 
a = [0.050822999 3.141592979]; 
n = 1; 

%// Output 
str = [num2str(a,'%0.9f ') ' ; (' num2str(n) ')'] 

结果:

str = 
0.050822999 3.141592979 ; (1) 
相关问题