c fscanf 按行读取文件_Matlab中fscanf语句用法参数SizeA详解

78b6db4101a1eebb59e703d45bfb02d7.png

数值如12345等可以作为字符,所以以字符格式读取文件时,这些数字照样可以被读取
A = fscanf(fileID,formatSpec)
A = fscanf(fileID,formatSpec,sizeA)
以上是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是读取字符串,不包括空白(即读取完后,数据之间无空白间隔);John199512512.3
而%c是逐个字符读取,包括空白(即读取完后,数据之间有空白间隔);John 1995 12 5
说完读取的部分,再来说说sizeA是如何控制fscanf函数的。sizeA=N的情形
(1)对于字符读取,采用%s
%s是一个字符串一个字符串进行读取的,fprintf(fid,'%s',sizeA)
sizeA可以使单个整数N,也可以是[m n]
我们先运行N,取值为1 3 5
clear;
fid = fopen('fscanfsample.txt','r'); i = 1;
name = fscanf(fid,'%s',1)
name =
'John'
clear;
fid = fopen('fscanfsample.txt','r'); i = 1;
name = fscanf(fid,'%s',2)
name =
'John1995'
clear;
fid = fopen('fscanfsample.txt','r'); i = 1;
name = fscanf(fid,'%s',5)
name =
'John199512512.3'
可以看到,%s每次读取一个字符串,前面提到,数字都可以当成字符串,但字符串不能当为数字
所以sizeA=1是读取一个字符串,sizeA=2时,读取两个字符串,5时读取5个字符串,并且没有空白间隔
所以sizeA其实就是控制fscanf读取数据的数目,
fscanf读取数据的时候是横向读取,而SizeA是控制读取的数目
(2)那么对于%c同样如此,只不过%c是一个一个字符去读,因此sizeA要扩大,比如读取第一个字符串John
对于%s,sizeA=1即可,但对于%c,则sizeA需要等于4才可读出。
(3)对于数值的读取同样代表读取的数据个数,但需要注意的是,%d指的是整数,%f指的是浮点数;我们看该文件第一行1995 12 5都是整数,如果写fscanf(fid,'%d',3)那么肯定能把这三个整数读到,并且按照列进行排列,如果写fscanf(fid,'%d',4),由于12.3由整数和小数两部分构成,因此小数点以前的12可以被读出来,但是小数点和小数点后的3无法读出来,因为不是整数。如果写fscanf(fid,'%d',5),照样只读到12.3的12就停止,因为不满足要求之后,fscanf会停止运行。返回之前读取的数据。
(4)fscanf 函数在整个文件中重新应用该格式,并将文件指针定位在文件结尾标记处。如果 fscanf 无法将 formatSpec 与数据相匹配,将只读取匹配的部分并停止处理
以上讲的都是sizeA=N的情形,接下来将sizeA=[m n]的情形
(1)对于字符串
字符串数据类型为char,char没有矩阵一说,字符串string的引用一般直接写str(i)即可,如str=’I love China‘, str(1)==I,str(5)==v,不能写为str(3,3),会报错:
str(3,3)
索引超出数组边界(不能超出 1)。
但是可以写str(1,3),相当于str(3);等于‘l'
因此,对于字符串,一般不需要也不用[m n].
(2) 对于数据类型
以此文件为例,由于第一个“john’为字符串,因此,直接运行fscanf(fid,'%d或%f',[m n])无法读取数据,因为数据类型不满足,会自动停止运行。
所以我们这里把Name列删除,删除之后为:
1995 12 5 12.3 3.24
1995 12 7 2.3 2.0
1996 3 2 10.2 0
这里我们可以看到,如果要想把所有数据读出来,sizeA用N表示应该为12。
另外该文件数据有整数和小数,如果用%d读的话,按行进行,遇到第一个小数点12.3,只会读取到12,点后边的就无法读取,因此要想把所有数据读出,需要用%f来进行。
我们执行fscanf(fid,'%f',[2 3]),得到结果如下:
A=fscanf(fid,'%f',[2 3])
A =
1.0e+03 *
1.9950 0.0050 0.0032
0.0120 0.0123 1.9950
发现fscanf从1995开始,共读取6个数据,并按照2行3列进行排列,到这里我们就会发现,对于数据类型,sizeA=[m n]
会使fscanf读取的数据个数为N=m*n个数据,并将他们按照m行n列进行排序,排序的时候,先进行列排序,再进行行排序,因此,行数m肯定是有限个数,n却可以使无穷大的,即inf。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MATLAB,可以使用fscanf函数来读取txt文件。该函数的语法如下: fid = fopen('filename.txt','r'); A = fscanf(fid,formatSpec,sizeA); fclose(fid); 其,filename.txt是要读取的txt文件名,'r'表示以只读方式打开文件。formatSpec是格式说明符,用于指定读取数据的格式。sizeA是一个可选参数,用于指定读取数据的大小。fscanf函数会返回一个文件标识符fid和读取的数据A。最后,需要使用fclose函数关闭文件。 例如,如果要读取一个包含两列数据的txt文件,可以使用以下代码: fid = fopen('data.txt','r'); A = fscanf(fid,'%f %f',[2 Inf]); fclose(fid); 这将读取data.txt文件的所有数据,并将其存储在一个2行N列的矩阵A。 ### 回答2: MATLABfscanf函数主要用于从文本文件读取数据。它可以将文件的数据按照指定格式读取并存储在变量fscanf函数使用和C语言的scanf函数一样的格式字符串,其的控制字符指定了要读取的数据类型和格式。可以读取整数、浮点数、字符串等。 fscanf函数有以下一般语法格式: A = fscanf(fileID,formatSpec,sizeA); 其,fileID为文件标识符,formatSpec为格式字符串sizeA为返回的矩阵大小。 要使用fscanf函数读取txt文件,首先需要打开文件,然后指定格式字符串读取数据。 例如: fID = fopen('data.txt','r'); data = fscanf(fID,'%f %f %f',[3 inf]); fclose(fID); 上述代码首先打开了名为“data.txt”的文件,并将其标识符存储在fID。然后使用%f格式字符读取数据,并将读取的数据存储在一个3行xN列的矩阵,其N是文件数据的总数,inf表示不限制列数。最后关闭文件。 此外,fscanf函数还有其他的参数和返回值,可以根据需要进行设置和使用。例如,可以使用*字符表示忽略某个字段,可以用fscanf读取多个文件等。总之,在使用fscanf函数读取txt文件时,需要仔细理解格式字符串的含义及其控制字符的用法,避免读取错误或数据类型不匹配的问题。同时,还需要注意文件的打开和关闭操作,以确保程序正常运行。 ### 回答3: MATLABfscanf函数可以读取txt文件的数据并将其转换为变量或数组。txt文件的数据可以通过空格、制表符、换行符或其他指定的分隔符进行分隔。 fscanf函数的语法如下: A = fscanf(fileID,format,size) 其,fileID是打开的文件的标识符,可以通过fopen函数获取;format是读取格式,用于指定将文件的数据转换为何种格式的变量;size是可选参数,用于指定读取的数据大小和维度。 格式字符串可以包含以下转换说明符: %c:读取一个字符 %d、%i:读取一个带符号的十进制整数 %u:读取一个无符号的十进制整数 %o:读取一个八进制整数 %x、%X:读取一个十六进制整数 %f:读取一个浮点数 %e、%E:读取一个浮点数,并使用指数表示法 %g、%G:基于数据的大小自动选择%f或%e %s:读取一个字符串 例如,假设有一个txt文件,其内容如下: 1 2 3 4 5 6 7 8 9 通过以下代码可以将其读取并转换为矩阵: fileID = fopen('data.txt','r'); A = fscanf(fileID,'%d',[3,3]) fclose(fileID); 其,r表示以只读的方式打开文件;%d表示读取一个带符号的十进制整数;[3,3]表示将数据读取为一个3×3的矩阵。通过fclose函数关闭文件。运行结果如下所示: A = 1 2 3 4 5 6 7 8 9 需要注意的是,fscanf函数读取数据时是按列进行的。如果需要按行读取数据,可以先将数据转换为一维数组,再根据维度将其转换为矩阵。例如: fileID = fopen('data.txt','r'); A = fscanf(fileID,'%d'); fclose(fileID); A = reshape(A,[3,3])' 其,reshape函数可以将一维数组转换为指定维度的矩阵;'表示对矩阵进行转置。运行结果与上例相同。 总之,在使用fscanf函数读取txt文件时,需要注意文件的格式和读取方式,并根据实际情况选择合适的转换说明符和格式字符串,以确保读取的数据正确无误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值