在MATLAB中加载文件,每个单元格中都有“垃圾”值

时间:2013-12-01 09:13:35

标签: matlab

我的数据格式为:

Value1 junk:Value2 junk:Value3 ....
....

我只想获得价值观。请注意,垃圾实际上是索引(偏移量为1),范围从1到256,每行中的第一个元素没有垃圾值。

示例:

6 1:-1.000000 2:-1.000000 3:-1.000000 4:-1.000000 5:-1.000000 6:-1.000000 7:-1.000000 8:-0.631000 9:0.862000 10:-0.167000
1 1:-1.000000 2:-1.000000 3:-1.000000 4:-1.000000 5:-1.000000 6:-1.000000 7:-1.000000 8:0.510000 9:-0.213000 10:-1.000000

我想从上面得到以下矩阵:

6 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -0.631000 0.862000 -0.167000
1 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 0.510000 -0.213000 -1.000000

使用load(myFile)时我只得到垃圾(除了每行中的第一个元素)。

我应该如何在MATLAB中解析它?

1 个答案:

答案 0 :(得分:2)

您可以使用textscan并使用星号(*)来忽略某些字段。例如:

fid = fopen('input.txt', 'r');                         %// Open the input file
A = textscan(fid, ['%f', repmat('%*[^:]:%f', 1, 10)]); %// Parse lines
fclose(fid);                                           %// Close the input file
A = [A{:}];                                            %// Convert into a matrix

这里%*[^:]匹配“垃圾”字段(直到第一个冒号的任何字符序列)。星号告诉textscan忽略它。然后匹配一个冒号,然后是一个浮点数。这种模式重复10次。

另一种可能性是将冒号视为空格:

A = textscan(fid, ['%f', repmat('%*s %f', 1, 10)], 'Whitespace', ' :\b\t');
因此,对于给定的例子,实现了相同的效果。这看起来不太优雅,恕我直言。