如何用Matlab读取列数可变且存在换行的文本数据文件
Matlab读取格式异常的TXT文件解决方案
针对你遇到的文件格式问题,可分两部分处理数据:
处理1~7556行的拆分数据
这部分每两行对应一组完整的19列数据(第一行15列,第二行4列),我们可以先提取所有数值,再重新排列为标准的19列结构:
fid = fopen('test.txt', 'r'); % 读取前7556行的所有数值(忽略换行,按空格/制表符拆分) data_part1_flat = textscan(fid, '%f', 'Delimiter', '\t ', 'EndOfLine', '\n', 'ReturnOnError', false); data_part1_flat = data_part1_flat{1}; % 验证元素数是否符合19列的整数倍(避免格式错误) if mod(length(data_part1_flat), 19) ~= 0 error('第一部分数据元素数异常,请检查文件格式'); end % 重排为每行19列的数据集 data_part1 = reshape(data_part1_flat, 19, [])';
处理7557行及以后的6列数据
这部分直接按每行6列读取即可:
% 读取剩余行的6列数据 data_part2 = textscan(fid, '%f %f %f %f %f %f', 'Delimiter', '\t ', 'EndOfLine', '\n', 'ReturnOnError', false); data_part2 = cell2mat(data_part2); fclose(fid);
说明
- 原代码失败原因:直接按每行19列匹配,但实际每行只有15/4列,
textscan无法匹配格式导致读取中断。 - 上述方案通过先提取所有数值再重排的方式,规避了换行拆分的问题;剩余部分则直接按目标格式读取。
内容的提问来源于stack exchange,提问作者Jake Stravinsky
相关产品推荐
相关产品推荐

