将类似字符串的“.text”数据导入Matlab作为矩阵

时间:2013-01-29 16:46:42

标签: matlab csv import text-files

我对导入.txt文件有疑问。该文件的格式如下,问题是matlab似乎没有识别每个“$”后面的“新行”字符指示符,因此matlab只将第5行视为连续的数据流

数据Matlab看到:

01-24-2013 [6:01:53] 
Kp (0070.0000)
Ki  (0200.0000)
Kd (0009.0000)
$,0045,0044,0000.05,0011.53,0005.64,$,0045,0048,0000.04,0011.55,0005.66,$....etc
01-24-2013 [7:01:48]

Data Wordpad看到了:

01-24-2013 [6:01:53] 
Kp (0070.0000)
Ki  (0200.0000)
Kd (0009.0000)
$,0045,0044,0000.05,0011.53,0005.64,
$,0045,0048,0000.04,0011.55,0005.66,
$, ....

使用“csvread”并跳过第1列导入“wordpad(重新保存)”所看到的格式没有问题,但是对于原始的.txt文件“Data Matlab看到”,我无法找到一种方法来判断Matlab如何阅读。理想情况下,我想告诉Matlab跳到第5行,然后每次遇到“$”时开始读取数据并在矩阵[nx5]中创建一个新行。有没有办法检测“$”并将数据重新格式化为可用的矩阵形式?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道你是如何设法将这些数据作为一行读取的,但假设你做了并想要拆分它。你可以使用全能的regexp

C = regexp(str, '\$,', 'split');

然后将字符串转换为数字并将所有内容转换为矩阵:

C = cellfun(@str2num, C, 'Uniform', false);
A = vertcat(C{:});

关于问题的第二部分:

  

理想情况下,我想告诉Matlab跳到第5行,然后开始阅读数据......

您可以使用'headerlines'选项{}进行textread

C = textread('file.txt', '%s', 1, 'headerlines', 4, 'delimiter', '\n')
str = C{1};

然后使用使用regexp的代码拆分字符串str

请注意,这只有在MATLAB确实“看到”您描述的第5行时才会起作用。如果没有,您只需获得矩阵中的第一行。

实施例

str = '$,0045,0044,0000.05,0011.53,0005.64,$,0045,0048,0000.04,0011.55,0005.66';
C = cellfun(@str2num, regexp(str, '\$,', 'split'), 'Uniform', false);
A = vertcat(C{:})

这导致:

A =
   45.0000   44.0000    0.0500   11.5300    5.6400
   45.0000   48.0000    0.0400   11.5500    5.6600
相关问题