使用readtable读取含重复表头的TXT文件返回空表的解决方法
解决方法
1. 读取文件所有行
先用readlines把文件每一行都读入,方便后续拆分数据块:
lines = readlines('data.txt'); % 过滤空行避免干扰 lines = lines(~isspace(lines));
2. 定位每个数据块的起始位置
每个数据块都以#Parameters开头,直接找出这些行的索引:
block_starts = find(startsWith(lines, '#Parameters')); % 增加末尾标记,方便处理最后一个数据块 block_starts = [block_starts; length(lines)+1];
3. 逐个解析数据块为矩阵
用单元格数组存储100个N×2矩阵,循环处理每个块:
data_blocks = cell(1, length(block_starts)-1); for i = 1:length(block_starts)-1 start_idx = block_starts(i); end_idx = block_starts(i+1) - 1; % 跳过每个块开头的3行表头,提取纯数据行 data_lines = lines(start_idx+3 : end_idx); % 将数据行解析为矩阵 data_blocks{i} = readmatrix(char(data_lines)); end
低版本MATLAB兼容写法
如果你的MATLAB版本低于R2019b(无readmatrix),可以替换成以下代码解析数据:
% 替换上述代码中的readmatrix行 data_cells = split(data_lines); data_blocks{i} = str2double(data_cells);
结果验证
现在data_blocks里的每个元素就是对应的数据块矩阵,比如查看第一个块:
disp(data_blocks{1});
问题根源:readtable默认将整个文件视为单一表格,重复出现的表头行打乱了解析逻辑,导致返回空表。手动拆分每个数据块再单独解析就能解决问题。
内容的提问来源于stack exchange,提问作者Shika93
相关产品推荐
相关产品推荐

