如何在Octave中读取带表头、维度未知的TXT矩阵文件 Matlab的readmatrix不适用
Octave读取带注释头的TXT矩阵数据解决方案
方法1:直接用内置dlmread函数(仅读取数据矩阵,最简方案)
Octave内置的dlmread支持自动跳过指定字符开头的注释行,你的文件注释都是#开头,直接用以下一行代码即可读取全部数字矩阵,无需提前知晓维度:
# 空格为分隔符,#开头的行全部自动跳过 data = dlmread("你的文件路径.txt", " ", 0, 0, "commentstyle", "shell");
参数说明:
- 第二个参数
" "表示分隔符为空格,适配你给出的文件格式 commentstyle设为shell即默认把#开头的行识别为注释跳过
方法2:自定义读取逻辑(同时提取头部注释信息+数据矩阵)
如果需要保留开头的时间戳、变量名等注释内容,可使用自定义读取流程:
fid = fopen("你的文件路径.txt", "r"); if fid < 0 error("文件打开失败,请检查路径"); end header = {}; line = fgetl(fid); # 循环读取所有#开头的注释行存入header while startsWith(line, "#") header{end+1} = line; line = fgetl(fid); end # 把读到的第一行非注释行放回流中,方便后续统一读取 fseek(fid, -length(line)-1, "cof"); # 读取剩下所有数字为矩阵 data = dlmread(fid, " "); fclose(fid); # 注释内容可从header变量获取: # header{1} 为时间戳行 # header{2} 为变量名行
如果使用的Octave版本不支持startsWith函数,可将判断条件替换为line(1) == "#"。
适配说明
以上两种方法均兼容你给出的两类文件格式:
- 对于2列的时间电流数据,自动生成N行2列的矩阵
- 对于多通道的27列传感器数据,自动生成N行27列的矩阵
无需手动修改参数适配不同维度的文件。
内容的提问来源于stack exchange,提问作者Jana
相关产品推荐
相关产品推荐

