MATLAB编程-简介
Excel 文件
-
xlsread
、xlswrite
:用于读取和写入 Excel 文件。
分隔符文件(Delimited files)
-
textscan
、dlmread
、dlmwrite
:用于处理以特定分隔符(如逗号、制表符等)分隔的数据文件。
底层函数(Low-level functions)
如果你熟悉 C 语言中的文件读写操作,MATLAB 的底层文件函数会让你感到很熟悉。对其他用户而言,这些函数在需要精细控制文件读写方式时非常有用,特别是在内置函数或 MATLAB 文件中心的函数无法正常工作时。
打开和关闭文件
使用底层函数读写文件前,必须先打开文件,并指定打开模式(读、写、追加等)以及是否允许创建新文件,例如:
fid = fopen('TEXTFILE.txt', 'r'); % 只读模式(如果文件不存在,将报错)
fid = fopen('TEXTFILE.txt', 'w'); % 写模式(覆盖已有文件)
fid = fopen('TEXTFILE.txt', 'w+'); % 写模式(如果不存在则创建新文件,覆盖已有内容)
fid = fopen('TEXTFILE.txt', 'a'); % 追加模式(将内容添加到已有文件末尾)
还有其他权限设置,详见 fopen
函数文档。
如果未指定权限,默认以只读方式打开文件。
MATLAB 文件标识符(File ID)的说明:
-
fid = -1
→ 无法打开文件 -
fid = 1
→ 标准输出 -
fid = 2
→ 标准错误输出
读取或写入完成后,务必使用 fclose
关闭文件,以避免数据损坏或被其他程序锁定:
fclose(fid);
格式说明符(Format Specifiers)
底层文本读写函数依赖用户告知数据格式。虽然使用起来更繁琐,但能精确控制读写的数据格式与排版。
spec = 'Bob has a daughter named %s';
说明符说明:
-
%s
:字符串 -
%d
:整数 -
%x.yf
:浮点数(x
表示小数点前位数,y
表示小数点后位数) -
%x
:十六进制整数
更多说明符详见fprintf
的官方文档。
读取示例
假设 Daughters.txt
文件内容为:
Bob has a daughter named Jill
读取方式如下:
fid = fopen('Daughters.txt');
spec = 'Bob has a daughter named %s';
s = fscanf(fid, spec);
fclose(fid);
输出结果为:
s = Jill
但如果文件内容是:
Bob has a son named Bob
则执行上述代码时,输出将为空字符串,因为开头部分不匹配。
如果文件内容是:
Bob has a son named Bob
Bob has a daughter named Jill
你必须先读取第一行,才能访问第二行。MATLAB 不会自动跳过不匹配的内容。
向量化的读写函数
与 C 语言中 fscanf
和 fprintf
不同,MATLAB 的对应函数是向量化的。你可以将整个矩阵传入 fprintf
让它逐行打印,或者用 fscanf
按统一格式逐行读取并返回一个矩阵。这种方式主要适用于数值型矩阵。
如果你处理的是全数字矩阵,可直接使用 dlmread
和 dlmwrite
,除非你对数值精度有特殊要求。
读取字符串单元格数组
如果需要从文本文件中读取包含字符串的单元格数组,建议使用 MATLAB 文件中心提供的 readtext
函数,它的用法类似于 xlsread/xlswrite
,并能返回结构清晰的结果。
textscan
也可以完成类似任务,前提是每一行的格式完全一致(例如不能在同一列混合数字和字符串、不能有空单元格等)。
写入字符串单元格数组
写入单元格数组到文本文件可以使用 MATLAB 文件中心中提供的工具函数。
不过,MATLAB 没有内置函数可像 textscan
那样将格式化的单元格数组写入文本文件。