目录
fscanf函数的功能是读取文本文件中的数据。
语法
A = fscanf(fileID,formatSpec)
A = fscanf(fileID,formatSpec,sizeA)
[A,count] = fscanf(___)
注意:
读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段指定可写入的最小值和可读取的最大值。
说明
A = fscanf(fileID ,formatSpec) 将打开的文本文件中的数据读取到列向量 A 中,并根据 formatSpec 指定的格式解释文件中的值。fscanf 函数在整个文件中重新应用该格式,并将文件指针定位在文件结尾标记处。
如果 fscanf 无法将 formatSpec 与数据相匹配,将只读取匹配的部分并停止处理。该文本文件由文件标识符 fileID 指示。使用 fopen 打开文件,指定字符编码,以及获取 fileID 值。读取文件后,请调用 fclose(fileID) 来关闭文件。
A = fscanf(fileID ,formatSpec,sizeA) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fscanf 按列顺序填充 A。sizeA 必须为正整数或采用 [m n] 的形式,其中 m 和 n 为正整数。
[A,count] = fscanf(___) 还将返回 fscanf 读取到 A 中的字段数。对于数值数据,这是已读取的值数。可以将此语法与前面语法中的任何输入参数结合使用。
示例
将文件内容读取到列向量中
创建一个包含浮点数的示例文本文件。如下所示:
x = 100*rand(8,1);
fileID = fopen('nums1.txt','w');
fprintf(fileID,'%4.4f\n',x);
fclose(fileID);
查看文件的内容。如下所示:
type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882
打开要读取的文件并获取文件标识符 fileID。如下所示:
fileID = fopen('nums1.txt','r');
定义要读取的数据的格式。使用 '%f' 指定浮点数。如下所示:
formatSpec = '%f';
读取文件数据并按列顺序填充输出数组 A。fscanf 在整个文件中重新应用格式 formatSpec。如下所示:
A = fscanf(fileID,formatSpec)
A = 8×1
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882
A 是一个包含该文件中的数据的列向量。关闭文件。如下所示:
fclose(fileID);
将文件内容读取到数组中
创建一个包含整数和浮点数的示例文本文件。如下所示:
x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID);
查看文件的内容。如下所示:
type nums2.txt
2 0.9058
3 0.1270
4 0.9134
5 0.6324
打开要读取的文件并获取文件标识符 fileID。如下所示:
fileID = fopen('nums2.txt','r');
定义要读取的数据的格式和输出数组的形状。如下所示:
formatSpec = '%d %f';
sizeA = [2 Inf];
读取文件数据并按列顺序填充输出数组 A。fscanf 在整个文件中重新使用格式 formatSpec。如下所示:
A = fscanf(fileID,formatSpec,sizeA)
A = 2×5
1.0000 2.0000 3.0000 4.0000 5.0000
0.8147 0.9058 0.1270 0.9134 0.6324
关闭文件,如下所示:
fclose(fileID);
转置该数组,以便 A 与文件中数据的方向匹配。如下所示:
A = A'
A = 5×2
1.0000 0.8147
2.0000 0.9058
3.0000 0.1270
4.0000 0.9134
5.0000 0.6324
跳过文件中的特定字符
跳过示例文件中的特定字符并仅返回数值数据。创建一个包含温度值的示例文本文件。
str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);
读取文件中的数字并跳过文本 °C。此外,还返回 fscanf。读取的值数。扩展的 ASCII 代码 176 表示度数符号。
fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);
A =
78
72
64
66
49
count =
5
A 是一个包含文件中的数值的向量。count 指示 fscanf 读取五个值。
提示
-
读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段指定可写入的最小值和可读取的最大值。