我正在尝试将结果字符串从系统命令解析为外部程序。
[status,result] = system(cmd);
结果打印出我的控制台,其线条正确分解,即
1行
LINE2
...
但它实际上只是一个长字符数组,并且在任何地方都没有换行符。 matlab如何知道何时打印新行?我怎样才能将char数组分成单独的行以进行进一步的解析。谢谢!
答案 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()
,它将自动为您处理换行符定义。