textread 函数适用于格式统一的 txt 文件一次性大批量读取,无需先调用 fopen。它通过指定文件名、格式字符串及可选参数,灵活解析数值、字符及混合数据。
基本语法
[A,B,C,...] = textread(filename, format)
[A,B,C,...] = textread(filename, format, N)
filename:目标文件名。format:读取格式,如%f(浮点)、%s(字符串)、%d(整数)等。N:读取次数或行数。- 输出变量个数必须与
format中定义的占位符数量一致。
注意:参数顺序很重要,filename、format、N 需放在其他选项之前。
场景一:无分隔符的纯数字矩阵
假设 mytest.txt 内容如下:
1 2 3 4
5 6 7 8
9 10 11 12
使用 %n 匹配任意数字:
[data1,data2,data3,data4] = textread('mytest.txt','%n%n%n%n');
data = [data1 data2 data3 data4];
结果将按列填充。若需限制读取行数,可添加第三个参数:
[data1,data2,data3,data4] = textread('mytest.txt','%n%n%n%n',3);
场景二:带分隔符的数据
对于逗号或分号分隔的文件,需指定 delimiter 参数。例如 myfile.txt:
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
读取时自动跳过分隔符:
[data1,data2,data3,data4] = textread('myfile.txt','%n%n%n%n','delimiter', ',');
处理 Iris 数据集时,若包含类别标签:
[data1,data2,data3,data4,data5] = textread('Iris.txt','%f%f%f%f%s','delimiter',',');
若只想读取前四列数值,忽略最后一列:
[data1,data2,data3,data4] = textread('Iris.txt','%f %f %f %f %*s',150,'delimiter',',');
其中 %*s 表示跳过该字段。
场景三:处理注释行
如果文件首行是注释,可使用 headerlines 跳过:
[data1,data2,data3,data4] = textread('myfiles.txt','%n%n%n%n','delimiter', ',', 'headerlines', 1);
headerlines 设为 1 即跳过第一行,可根据实际注释行数调整。
场景四:混合数据类型与跳过列
当一行中包含字符串、数字和布尔值时,格式串需对应:
[names, types, x, y, answer] = textread('myfile4.txt' , '%s %s %f %d %s', 1);
若中间某列不需要,可用 %*f 忽略:
[names, types, y, answer] = textread('myfile4.txt' , '%s %s %*f %d %s', 1);
或者提取特定部分,如从 Level1 中提取数字:
[names, levelnum, x, y, answer] = textread('myfile4.txt','%s Level%d %f %d %s', 1);
场景五:处理空值
文件中存在缺失数据时,可用 emptyvalue 将其替换为 NaN:
[data1 data2 data3 data4 data5 data6] = textread('myfile5.txt','%f%f%f%f%f%f', 'delimiter', ',', 'emptyvalue', NaN);
这样空位会显示为 NaN,便于后续计算处理。
场景六:跳列读取
若只需读取每行的部分内容,可利用正则表达式跳过剩余字符:
[names] = textread('myfile6.txt','%s%\[^\n\]');
%\[^\n\] 表示读取到行尾,但 %* 开头则直接跳过该行剩余内容。此技巧适合快速提取单列信息。
场景七:日期时间格式
对于结构化较强的日志或数据,可拆分日期时间字段:
[location year month day hour minute discharge] = textread('myfile7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';');
注意分隔符与格式串中的符号需严格对应。
小结
textread 在处理旧版数据或简单文本导入时非常高效。不过需注意,在新版 MATLAB 中,建议优先考虑 readtable 或 importdata,以获得更好的兼容性和功能支持。

