在MATLAB中读取文本文件时,我使用:
- 2353535.123213.124 -> 2353535.123213.124
- data.2354234.1324.1314 -> 2354234.1324.1314
- data.old-24234.2341.4325 -> 24234.2341.4325
- aaaa.53535 -> Do nothing
并非每一行都符合formatSpec,并且可能包含错误消息。现在,Matlab将停在不符合上述格式的行上。
如何跳过formatSpec无法匹配的所有行?
所以输入文件如下所示:
file = fopen(filename, 'r');
formatSpec = '%d %d %d %d';
A = fscanf(file, formatSpec, [4 Inf]);
应该给我以下矩阵:
04 2 1 312
04 2 2 212
04 error
05 2 1 421
答案 0 :(得分:0)
这适用于你的例子。 它读取一行,用空格分隔它并检查所有元素是否都是整数(这可以改为double或者其他)。如果有一个字符串,则跳过该行,否则它会将元素写入矩阵并用NaN填充其余部分。后者仅适用于每行有不同数量的元素的情况...... 只需确保linemax大于数据文件中的行数,并且elementsmax大于每行的元素数。
clear all
fclose all;
filename = 'text_test.dat';
file = fopen(filename, 'r');
linemax = 1000;
elementsmax = 100;
A = zeros(linemax,elementsmax);
line = 1;
real_elementsmax = 1;
while (feof(file) == 0 && line < linemax) % read until the end of the file is reached
linetext = fgetl(file); %read frst line of the file
text_array=regexp(linetext,' ','split');
if min(isint(str2double(text_array)))
nelements = size(text_array,2);
A(line,1:nelements) = str2double(text_array(1:nelements));
A(line,nelements+1:elementsmax) = NaN;
line = line+1;
real_elementsmax = max(real_elementsmax,nelements);
end
end
fclose(file);
A(line:linemax,:)=[];
A(:,real_elementsmax+1:elementsmax)=[];