Matlab中fscanf语句用法参数SizeA详解

如题所述

数值如12345等可以作为字符,因此在以字符格式读取文件时,这些数字同样能被读取。在 MATLAB 中使用 fscanf 语句时,参数 SizeA 的作用是限制读取文件中数据的数量。例如,考虑以下一组数据:

John 1995 12 5 12.3 3.24
Tom 1995 12 7 2.3 2.0
Jean 1996 3 2 10.2 0

假设文件包含此组数据,其中每个空白间隔表示一个数据点。第一个数据为 'John',是一个字符串,读取格式为 fprintf(fid,'%s or %c',SizeA)。注意,对于字符串读取,%s 表示读取字符串,不包含空白(即读取后,数据之间无空白间隔),例如读取格式为 %s,SizeA 为 1 时,输出为 'John199512512.3'。相反,如果使用%c 逐个字符读取,包括空白,SizeA 需要相应调整,例如读取第一个字符串 'John',对于 %c,SizeA 需要等于 4 才可读出。

在读取部分后,我们讨论 SizeA 如何控制 fscanf 函数。当 SizeA 设置为 N 时:

- 对于字符读取,使用 %s,每次读取一个字符串。SizeA 可以是单个整数 N、或 [m n] 形式。例如,对于 SizeA=1,读取一个字符串;SizeA=2 时,读取两个字符串;SizeA=5 时,读取五个字符串,且数据之间无空白间隔。
- 对于字符读取,SizeA 限制读取的字符串数量,fscanf 函数横向读取数据,SizeA 控制读取的数目。

在数值读取部分,SizeA 也代表读取的数据个数。例如,对于整数 %d,例如文件中第一行的 1995、12、5,使用 fscanf(fid,'%d',3) 能将这三个整数读出,并按列排列。如果使用 %d 读取四个值时,由于 12.3 包含整数和小数,只能读取整数部分 12,小数点及后边部分无法读取。如果使用 %f,即可读取所有数据,例如执行 fscanf(fid,'%f',[2 3]),得到结果为:

A = 1.0e+03 *
1.9950 0.0050 0.0032
0.0120 0.0123 1.9950

这表明 fscanf 函数读取了六个数据,并按两行三列排列。从这里可以看出,对于数据类型,SizeA=[m n] 会使 fscanf 函数读取 m*n 个数据,并按照 m 行 n 列进行排序。排序时先进行列排序,再进行行排序。行数 m 是有限的,n 可以是无穷大,即 inf。

综上所述,SizeA 参数在 fscanf 函数中起到了控制读取数据数量和数据排列的作用,根据实际需求灵活设置 SizeA 可以有效读取和管理文件中的数据。
温馨提示:答案为网友推荐,仅供参考
相似回答