从MATLAB系统命令中查找换行符

时间:2012-02-05 21:11:53

标签: string matlab system printf

我正在尝试将结果字符串从系统命令解析为外部程序。

[status,result] = system(cmd);

结果打印出我的控制台,其线条正确分解,即

1行

LINE2

...

但它实际上只是一个长字符数组,并且在任何地方都没有换行符。 matlab如何知道何时打印新行?我怎样才能将char数组分成单独的行以进行进一步的解析。谢谢!

4 个答案:

答案 0 :(得分:4)

根据操作系统的不同,不同的字符代表行尾。它可以是\n\r\f或他们的组合。这些字符的ASCII码少于30.因此,您可以使用find(results < 30)来查找它们,以显示它们在字符串中的位置,并int32(results(results < 30))查看它们的代码。

int32(sprintf('\n\r\f'))

ans =

      10          13          12

然后你可以使用你得到的代码来分割字符串:

regexp(results, char(13), 'split')

如果您对哪些字符用作行尾不感兴趣,可以尝试:

regexp(results, '[\f\n\r]', 'split')

答案 1 :(得分:2)

根据Andrey的回答,您可以使用以下命令将字符串拆分为单元格数组:

split_result = regexp(result, '\n', 'split');

这使用正则表达式在每个换行符处拆分字符串。

然后,您可以使用以下方法访问系统命令输出的每一行:

 split_result{index}

答案 2 :(得分:1)

使用\n字符。 考虑一下这个用例:

x = sprintf('12123\nxyz');
disp(x);

结果是:

  

12123
  XYZ

所以你可以随处找到特殊的\n字符。

indexes = strfind(x,sprintf('\n'));

查看此网站:http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

答案 3 :(得分:0)

从Matlab R2016b开始,您还可以使用命令splitlines(),它将自动为您处理换行符定义。