如何在Matlab中将特定格式的数据读取到矩阵中?

时间:2013-01-27 08:44:21

标签: matlab

我有一个文本文件FILE1.txt,其中包含以指定格式记录的数据。

[39645212,-79970785]35892002323232[0.0][39645212,-79970785]35892002323232[12.2]

我想将此数据加载到大小为2 * 4的矩阵中。我尝试使用dlmread,这会让我失误。我正在尝试使用textread获取一些东西。我怎样才能得到类似的东西:

39645212 -79970785 35892002323232 0.0
39645212 -79970785 35892002323232 12.2

3 个答案:

答案 0 :(得分:2)

fid = fopen('fun.txt'); %the file you want to read
A=fscanf(fid,'[%d,%d]%d[%g][%d,%d]%d[%g]',[2 inf]);
fclose(fid);

有关格式化字符串

的语法,请参阅fscanf

答案 1 :(得分:2)

让我们尝试使用regexp

mat = []; % I am lazy and I do not per-allocate. this is BAD.
fh = fopen( 'FILE1.txt', 'r' ); % open for read
line = fgetl( fh );
while ischar( line )
    tks = regexp( line, '\[([^,]+),([^\]]+)\]([^\[]+)\[([^\]]+)', 'tokens' );
    for ii = 1:numel(tks)
        mat( end+1 ,: ) = str2double( tks{ii} );
    end
    line = fgetl( fh );
end
fclose( fh ); % do not forget to close the handle :-)

注意:

  1. 我假设没有空格,只有数字介于'[',']'和','之间。所以我可以在恢复的字符串上使用str2double

  2. 我没有预先分配mat - 这是不好的做法,可能会大大降低性能。有关如何预分配的详细信息,请参阅this question

答案 2 :(得分:2)

您的问题非常具体,我的解决方案也是如此:

C = textread('FILE1.txt', '%s', 'delimiter', '\n');
A = reshape(str2num(regexprep([C{:}], '[\]\[,]', ' ')), 4, [])'

这将用空格替换所有括号和逗号,将所有内容转换为数字并重新整形为具有4列的矩阵A。它应该适用于具有多行的输入文件。