MATLAB fscanf()和fprintf()读写文本文件(附带实例)
文本文件是最便于使用和共享的文件,几乎适用于任何计算机。许多基于文本的程序可读取基于文本的文件。
如果需要通过其他应用程序访问数据,如文字处理或电子表格应用程序,可将数据存储在文本文件中。如果需要将数据存储在文本文件中,使用字符串函数可将所有的数据转换为文本字符串。文本文件可包含不同数据类型的信息。
如果数据本身不是文本格式(如图形或图表数据),由于数据的 ASCII 码表示通常要比数据本身大,因此文本文件要比二进制和数据记录文件占用更多内存。例如,将 -123.4567 作为单精度浮点数保存时只需 4 个字节,如使用 ASCII 码表示,需要 9 个字节,每个字符占用一个字节。
另外,很难随机访问文本文件中的数值数据。尽管字符串中的每个字符占用一个字节的空间,但是将一个数字表示为字符串所需要的空间通常是不固定的。
将数值数据保存在文本文件中,可能会影响数值精度。计算机将数值保存为二进制数据,而通常情况下数值以十进制的形式写入文本文件。因此,将数据写入文本文件时,可能会丢失数据精度。二进制文件中并不存在这种问题。
文件 I/ O函数可在文本文件和电子表格文件中读取或写入数据。
fscanf() 函数的调用格式及说明如下表所示:
【实例 1】将文件内容读取到列向量中。创建文本文件 read_ex.txt,输入数据,以空格或制表符分隔,如下图所示。

图 1 文本文件
在 MATLAB 命令行窗口输入如下命令:
fprintf() 函数的调用格式及说明如下表所示:
【实例 2】输出文本值。在 MATLAB 命令行窗口中输入如下命令:
下表显示了要将数值和字符数据格式化为文本的转换字符:
读取操作如果遇到回车符后加换行符(\r\n),则会从输入中删除回车符,写入操作在输出中的任何换行符之前插入一个回车符。
【实例 3】将数据写入文本文件。创建 txt 文件 cos.txt。输入下面的数据(如下图所示):

图 2 TXT文件
在 MATLAB 命令行窗口输入如下程序:

图 3 追加数据
如果需要通过其他应用程序访问数据,如文字处理或电子表格应用程序,可将数据存储在文本文件中。如果需要将数据存储在文本文件中,使用字符串函数可将所有的数据转换为文本字符串。文本文件可包含不同数据类型的信息。
如果数据本身不是文本格式(如图形或图表数据),由于数据的 ASCII 码表示通常要比数据本身大,因此文本文件要比二进制和数据记录文件占用更多内存。例如,将 -123.4567 作为单精度浮点数保存时只需 4 个字节,如使用 ASCII 码表示,需要 9 个字节,每个字符占用一个字节。
另外,很难随机访问文本文件中的数值数据。尽管字符串中的每个字符占用一个字节的空间,但是将一个数字表示为字符串所需要的空间通常是不固定的。
将数值数据保存在文本文件中,可能会影响数值精度。计算机将数值保存为二进制数据,而通常情况下数值以十进制的形式写入文本文件。因此,将数据写入文本文件时,可能会丢失数据精度。二进制文件中并不存在这种问题。
文件 I/ O函数可在文本文件和电子表格文件中读取或写入数据。
MATLAB读文本文件
在 MATLAB 中,fscanf() 函数用于读取文本文件中的数据。fscanf() 函数的调用格式及说明如下表所示:
调用格式 | 说明 |
---|---|
A = fscanf(fileID,formatSpec) | 将打开的文本文件中的数据读取到列向量 A 中,并根据 formatSpec 指定的格式解释文件中的值 |
A = fscanf(fileID,formatSpec,sizeA) | 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。sizeA 必须为正整数或采用 [m n] 的形式,其中 m 和 n 为正整数 |
[A,count] = fscanf(...) | 返回 fscanf 读取到 A 中的字段数 count |
【实例 1】将文件内容读取到列向量中。创建文本文件 read_ex.txt,输入数据,以空格或制表符分隔,如下图所示。

图 1 文本文件
在 MATLAB 命令行窗口输入如下命令:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> fileID = fopen('read_ex.txt','r'); % 打开要读取的文本文件 >> A=fscanf(fileID,'%f\n') % 读取文本文件中的浮点数数据 A = 16.5500 2.8700 3.6500 5.8600 11.4200 10.7800 9.6300 7.4700 6.2100 >> fclose(fileID); % 关闭文件
MATLAB写文本文件
在 MATLAB 中,使用 fprintf() 函数将数据写入文本文件。fprintf() 函数的调用格式及说明如下表所示:
调用格式 | 说明 |
---|---|
fprintf(fileID,formatSpec,A1,⋯,An) | 按列顺序将 formatSpec 应用于数组 A1, A2, ⋯, An 的所有元素,并将数据写入一个文本文件 |
fprintf(formatSpec,A1,⋯,An) | 设置数据的格式并在屏幕上显示结果 |
nbytes = fprintf(⋯) | 返回 fprintf 所写入的字节数 |
【实例 2】输出文本值。在 MATLAB 命令行窗口中输入如下命令:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> T=[0 32.5 46.3 78.8 85.5 96.6 107.3 110.4 115.7 118 119.2 119.8 120]; % 输入温度T 的数据 >> formatSpec = 'X is %4.2f meters or %8.3f mm\n'; % 设置输出字段的格式 >> fprintf(formatSpec,T) % 以指定的格式在屏幕上输出字段 X is 0.00 meters or 32.500 mm X is 46.30 meters or 78.800 mm X is 85.50 meters or 96.600 mm X is 107.30 meters or 110.400 mm X is 115.70 meters or 118.000 mm X is 119.20 meters or 119.800 mm X is 120.00 meters or >> 1 % 用户输入 ans = 1注意,%4.2f 指定输出中每行的第 1 个值为浮点数,字段宽度为四位,包括小数点后的两位数。%8.3f 指定输出中每行的第 2 个值为浮点数,字段宽度为八位,包括小数点后的三位数。\n 为新起一行的控制字符。
下表显示了要将数值和字符数据格式化为文本的转换字符:
值类型 | 转换 | 详细信息 |
---|---|---|
有符号整数 | %d 或 %i | 以 10 为基数 |
无符号整数 | %u | 以 10 为基数 |
%o | 以 8 为基数(八进制) | |
%x | 以 16 为基数(十六进制),小写字母 a-f | |
%X | 与 %x 相同,大写字母 A~F | |
浮点数 | %f | 定点记数法(使用精度操作符指定小数点后的位数) |
%e | 指数记数法,例如 3.141593e+00(使用精度操作符指定小数点后的位数) | |
%E | 与 %e 相同,但为大写,例如 3.141593E+00(使用精度操作符指定小数点后的位数) | |
%g | 更紧凑的 %e 或 %f,不带尾随零(使用精度操作符指定有效数字位数) | |
%G | 更紧凑的 %E 或 %f,不带尾随零(使用精度操作符指定有效数字位数) | |
字符或字符串 | %c | 单个字符 |
%s | 字符向量或字符串数组。输出文本的类型与 formatSpec 的类型相同 |
读取操作如果遇到回车符后加换行符(\r\n),则会从输入中删除回车符,写入操作在输出中的任何换行符之前插入一个回车符。
【实例 3】将数据写入文本文件。创建 txt 文件 cos.txt。输入下面的数据(如下图所示):
x = 0:.1:1; A = [x^2;cos(x)];

图 2 TXT文件
在 MATLAB 命令行窗口输入如下程序:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> fileID = fopen('cos.txt','a'); % 打开要写入的文件,在文件末尾追加数据 >> fprintf(fileID,'%6s %12s\n','x','cos(x)'); % 以指定格式将数据写入文件 >> fclose(fileID); % 关闭文件运行后的文本文件添加的数据如下图所示:

图 3 追加数据