如何使用标记导入数据 - 但不包括这些标记?

时间:2014-07-17 12:36:09

标签: arrays matlab file-io matrix data-import

当我去导入数据矩阵时,在第一列的第一行中,每个新的时间数据都有一个标记,这个标记干扰了MATLAB如何导入数据。

有没有办法对此进行编码?

例如:

'> 1 6 1 1 -0.00161

1 6 1 2 -0.00140

1 6 1 3 -0.00145

1 6 1 4 -0.00153

1 6 1 5 -0.00120

1 6 1 6 -0.00076

我不希望手动从数据中删除>,因为可能有数千个。

2 个答案:

答案 0 :(得分:0)

如果您在* nix系统下或者您有cygwin,那么如果您将此输出发送到命令>,则可以删除这些sed。例如:

user@host $ cat out.txt
>0 5 3 4  

0 6 4 3

>1 5 3 6

1 2 4 5
user@host $ cat out.txt |sed 's/>//g'

如果需要将此新输出存储到文件中:     user @ host $ cat out.txt

  

0 5 3 4

0 6 4 3

>1 5 3 6

1 2 4 5
user@host $ cat out.txt |sed 's/>//g' > out_without_unneeded_symbols.txt
user@host $ cat out_without_unneeded_symbols.txt
0 5 3 4  

0 6 4 3

1 5 3 6

1 2 4 5

如果此输出取自当前目录中的某个程序:

user@host $ ./some_program |sed 's/>//g'

答案 1 :(得分:0)

这是MATLAB中的一种可能的实现方式:

% read file lines as a cell array of strings
fid = fopen('file.dat', 'rt');
C = textscan(fid, '%s', 'Delimiter','');
C = C{1};
fclose(fid);

% find marker locations
markers = strncmp('>', C, 1);

% remove markers
C = regexprep(C, '^>', '');

% parse numbers into a numeric matrix
X = regexp(C, '\s+', 'split');
X = str2double(vertcat(X{:}));

结果:

% the full matrix
>> X
X =
     0     5     3     4
     0     6     4     3
     1     5     3     6
     1     2     4     5

% only the marked rows
>> X(markers,:)
ans =
     0     5     3     4
     1     5     3     6