MATLAB fgetl()、fgets()和fprintf()函数:读文本文件(附带实例)
本节介绍 MATLAB 中 3 个读取文本文件的函数,分别是 fgetl()、fgets() 和 fscanf()。
【实例 1】读文本文件。在命令行窗口中输入如下代码,并保存为 M 文件。
fscanf() 函数的调用格式如下:
format 用于指定读入数据的类型,常用的格式如下:
在格式说明中,除了单个的空格字符可以匹配任意个数的空格字符,通常的字符在输入转换时将与输入的字符一一匹配。函数 fscanf() 将输入的文件看作一个输入流,MATLAB 根据格式匹配输入流,并将匹配中匹配的数据读入 MATLAB 系统中。
【实例 2】fscanf() 的使用。
1) 用 type 命令读取 table.txt 文件中的内容。在命令行窗口中输入以下代码:
2) 按字符串形式输入,读取结果。在命令行窗口中输入如下代码,并保存为 M 文件:
3) 以双精度格式读取文本。在命令行窗口中输入以下代码,并显示相应的输出结果:
【实例 3】使用 fprintf() 和 fscanf() 函数写入并读取字符串。在命令行窗口中输入如下代码,并保存为 M 文件:
MATLAB fgetl()和fgets()
在 MATLAB 中,利用 fgetl() 函数和 fgets() 函数可以读取文本文件,它们的调用格式如下:- tline=fgetl(fID):读取文件中的行,并删除换行符。
- tline=fgets(fID):读取文件中的行,并保留换行符。
【实例 1】读文本文件。在命令行窗口中输入如下代码,并保存为 M 文件。
fID=fopen('t.m'); while 1 tline = fgetl(fID); if ~ischar(tline) break; end disp(tline) end fclose(fID);运行后,输出结果如下:
a=[35,20,25,15,35];
b=[1554.88,1555.24,1555.76,1556.20,1556.68];
figure(1)
plot(a,b)
MATLAB fscanf()
若已知 ASCII 码文件的格式,要进行更精确的读取,则可用 fscanf() 函数从文件中读取格式化的数据。fscanf() 函数的调用格式如下:
[a,count]=fscanf(fID,format,size)此命令从文件标识为 fID 的文件中读取数据,并转换成指定的 format 格式字符串(返回到矩阵 a 中):
- count 是可选输出项,表示成功读取的数据个数;
-
size 是可选输入项,对可以从文件中读取的数据数目做了限制,如果没有指定,则默认为整个文件;否则可以指定为 3 种类型,即 n、inf、[m, n]:
- n:读取前 n 个整数,并写入一个列向量中;
- inf:读至文件末尾;
- [m, n]:读取数据到 m×n 维的矩阵中,按列排序。n 可以是 inf,但 m 不可以。
format 用于指定读入数据的类型,常用的格式如下:
- %s:按字符串进行输入转换;
- %d:按十进制数据进行转换;
- %f:按浮点数进行转换。
在格式说明中,除了单个的空格字符可以匹配任意个数的空格字符,通常的字符在输入转换时将与输入的字符一一匹配。函数 fscanf() 将输入的文件看作一个输入流,MATLAB 根据格式匹配输入流,并将匹配中匹配的数据读入 MATLAB 系统中。
【实例 2】fscanf() 的使用。
1) 用 type 命令读取 table.txt 文件中的内容。在命令行窗口中输入以下代码:
>> type table.txt输出结果如下:
1 2 3 4 5 6 7 8 9
2) 按字符串形式输入,读取结果。在命令行窗口中输入如下代码,并保存为 M 文件:
fID=fopen('table.txt','r'); title=fscanf(fID,'%s'); status=fclose(fID); title运行后,输出结果如下:
title = '123456789'
3) 以双精度格式读取文本。在命令行窗口中输入以下代码,并显示相应的输出结果:
>> fID=fopen('table.txt','r') >> data=fscanf(fID,'%f') fID = 5 data = 1 2 3 4 5 6 7 8 9
【实例 3】使用 fprintf() 和 fscanf() 函数写入并读取字符串。在命令行窗口中输入如下代码,并保存为 M 文件:
clear all; a='LadyGaga ,BAD Romance.' [fID,msg]=fopen('chap.txt','wt'); if fID==-1 disp(msg); else fprintf(fID,'%s',a); fclose(fID); end [fID,msg]=fopen('chap.txt','r'); if fID==-1 disp(msg); else a1=fscanf(fID,'%c',4) frewind(fID); a2=fscanf(fID,'%c',[3,4]) frewind(fID) a3=fscanf(fID,'%c') frewind(fID) a4=fscanf(fID,'%s',4) frewind(fID) a5=fscanf(fID,'%s') fclose(fID); end运行后,输出结果如下:
a = 'LadyGaga ,BAD Romance.' a1 = 'Lady' a2 = 3X4 char 数组 'Lyg,' 'aGaB' 'da A' a3 = 'LadyGaga ,BAD Romance.' a4 = 'LadyGaga,BADRomance.' a5 = 'LadyGaga,BADRomance.'