如何将特殊格式的数据文件加载到matlab中?

时间:2011-09-07 02:16:55

标签: matlab file-io

我需要将数据文件test.dat加载到Matlab中。数据文件的内容类似于

  

* a682 1233~0.2
    * a2345 233~0.8 345~0.2 4567~0.3
    * a3457 345~0.9 34557~1.2 34578~0.2 9809~0.1 2345~2.9 23452~0.9 334557~1.2 234578~0.2 19809~0.1 23452~2.9 3452~0.9 4557~1.2 3578~0.2 92809~0.1 12345~2.9 232452~0.9 33557~1.6 23478~0.6 198099~2.1 234532~2.9 ...

如何将这种类型的文件读入matlab,并使用* 2345等术语来识别一行,其中链接到相应的术语,包括233~0.8 345~0.2 4567~0.3

感谢。

1 个答案:

答案 0 :(得分:0)

因为每个行的大小不同,您必须制作单元格数组,结构或处理向矩阵添加NaN或零。我选择使用一个单元阵列,希望它没关系!如果有人比regexp更好,请评论,输出单元现在不完美(即显示345~而不是345~0.9)但我相信这是一个小修复。这是代码:

datfile = 'test.dat';
text = fileread(datfile);

row1 = regexp(text,'*[a-z]?\d+','match');
data(:,1) = row1';

row2 = regexp(text,'*[a-z]?\d+','split');
row2 = [row2(:,2:end)'];
for i = 1:size(row2,1)
   data{i,2} = regexp(row2{i},'\d+\S\d+\s','split');
end

这会创建一个名为data的单元数组,其中每行的第一列是* a682 id,每行的第二列是包含数据值的单元格。要获得它们,您可以使用:

data{1} 

显示ID

data{1,2}

显示单元格内容

data{1,2}{1}

显示特定数据点

这应该有效并且相对简单!