我对导入.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]中创建一个新行。有没有办法检测“$”并将数据重新格式化为可用的矩阵形式?
谢谢!
答案 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