Excel 文件

  • xlsreadxlswrite:用于读取和写入 Excel 文件。


分隔符文件(Delimited files)

  • textscandlmreaddlmwrite:用于处理以特定分隔符(如逗号、制表符等)分隔的数据文件。


底层函数(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 语言中 fscanffprintf 不同,MATLAB 的对应函数是向量化的。你可以将整个矩阵传入 fprintf 让它逐行打印,或者用 fscanf 按统一格式逐行读取并返回一个矩阵。这种方式主要适用于数值型矩阵。

如果你处理的是全数字矩阵,可直接使用 dlmreaddlmwrite,除非你对数值精度有特殊要求。


读取字符串单元格数组

如果需要从文本文件中读取包含字符串的单元格数组,建议使用 MATLAB 文件中心提供的 readtext 函数,它的用法类似于 xlsread/xlswrite,并能返回结构清晰的结果。

textscan 也可以完成类似任务,前提是每一行的格式完全一致(例如不能在同一列混合数字和字符串、不能有空单元格等)。


写入字符串单元格数组

写入单元格数组到文本文件可以使用 MATLAB 文件中心中提供的工具函数。
不过,MATLAB 没有内置函数可像 textscan 那样将格式化的单元格数组写入文本文件。



最后修改: 2025年04月16日 星期三 11:22