[原创]matlab 的fscanf函数
matlab 输入 fscanf函数
matlab调用文本文档的数据,是相当简洁的。但是,目前不管是网络上,还是各类教材
说的都很简陋。有时候抱着本书看了n次,仍然不知道如何下手。我最近遇到这样一个问题。
又一个数据文件,当然后缀名是可以更改的,可以是txt也可以是dat。文件不是帮助中的简
单数据形式,仅有一个类似矩阵般的数据排列。为了方便运算,数据体中一定要有文字注释,
并且,数据分很多中,有渗透率的,也有井的。数据长度不同。而用matlab中的load
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
必须要用行长度相同的数据。比如说:
1 2 3 4 4
2 3 4 5 6
这样的数据很容易读入,用load非常合适,文字注释部分前面加上%,matlab就不会读
文字行。但是我的数据是类似下面的
数据
11 11 3 1.00
长度
50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50
纵向
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
4.00
4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00 4.00
这样的话,如果想用load函数,就要把这个数据分成好几份,分别调用,这对于程序的应用非常不便。于是我就考虑用fscanf函数,这个函数的应用与c++中有几分相似,呃,坦诚的说是非常相似,但是好像不支持换行,比如说遇到注释行然后跳过去,他不支持。也许支持,但我不会,^_^
用fscanf是可以一个一个读入数据,也可以一下读入一个二维数组。非常方便。我找了个中文的帮助资料,但是是繁体的,不过大家凑活看吧。如果遇到注释行,用下面的语句fscanf(fid,’%6s’,1); ,其中的6代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
读入的字码长度。本来想多写点,但是好累,休息会,编程不是人干的活。
正式之读取资料函数如下之格式:
A=fscanf(fid,format)
[A, count]=fscanf(fid,format,size) [A, count]=fscanf(fid,format,size)
這個指令可以自fid所標示的檔案中將其資料依format的格式取出,並置於矩陣,中。这个指令可以自fid所标示的档案中将其资料依format的格式取出,并置于矩阵,中。 fid的定義與前述之fprintf指令相同。 fid的定义与前述之fprintf指令相同。 另一種型式則增加count與size兩參數。另一种型式则增加count与size两参数。 count表示已完成的資料筆數。 count表示已完成的资料笔数。 而size則是決定讀入之資料量,可用[m,n]表示,表示讀入之資料可填滿mxn的矩陣。而size则是决定读入之资料量,可用[m,n]表示,表示读入之资料可填满mxn的矩阵。 其中n 可用inf取代,代表EOF(End of File)。其中n可用inf取代,代表EOF(End of File)。
此處格式 format 之 % 符號大體上與 fprintf 相同,其中 %e,%f,%g 均代表具有浮點之數據。 此处格式 format 之 % 符号大体上与 fprintf 相同,其中 %e,%f,%g 均代表具有浮点之数据。 以 %12hd 為例, 12 為數值之總位數, d 代表使用整數,其前面所置的文字表示整數的型式, h 代表短整數, l 代表長整數,而 lg 則代表雙精度浮點值。 以 %12hd 为例, 12 为数值之总位数, d 代表使用整数,其前面所置的文字表示整数的型式, h 代表短整数, l 代表长整数,而 lg 则代表双精度浮点值。 這些文字代碼可參考 fprintf 指令,其功能相似。 这些文字代码可参考 fprintf 指令,其功能相似。
fid=fopen('sinx.txt'); A=fscanf(fid,'%g %g',[2 inf]); %最後項為size,表示讀入二列資料,直到檔案底 A=fscanf(fid,'%g %g',[2 inf]); %最后项为size,表示读入二列资料,直到档案底 fclose(fid);
A=A' A = A = 0 0.3142 0 0.3142 0.6283 0.9425 0.6283 0.9425 1.2566
1.5708 1.2566 1.5708 1.8850 2.1991 1.8850 2.1991 2.5133 2.8274 2.5133 2.8274
3.1416 0 3.1416 0 0.3090 0.5878 0.3090 0.5878 0.8090 0.9511 0.8090
0.9511 1.0000 0.9511 1.0000 0.9511 0.8090 0.5878 0.8090 0.5878 0.3090
0 0.3090 0
fscanf
功能简介
从文本文件中读取数据
版本支持
7.8.0.347 (R2009a)
语法
A = fscanf(fileID, format)
A = fscanf(fileID, format, sizeA) [A, count] = fscanf(...)
描述
A = fscanf(fileID, format)
从一个文本文件中数据列顺序读取并转换成数组。要转换,fscanf使用的格式和编码
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
与该文件相关联。要设置的编码方案,使用fopen。该fscanf函数重新应用在整个文件的格式,并在最终的文件标记位置的文件指针。如果fscanf无法比拟的格式的数据,
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
是:只有那部分分为A,停止处理 。
A = fscanf(fileID, format, sizeA) 读入一个sizeA元素和最后一个元素的位置后,文件指针读取。 sizeA可以是整数,也可以有表格[m,n]。
[A, count] = fscanf(...)
fscanf成功读取,返回数字的元素。
输入参数
fileID
FOPEN获得的整数文件标识符。
format
字符串括在单引号中,描述每个元素的类型(场)。包括一个或更多下列说明符。
字段类说明符 详情 型
10进制 %d
确定进制的值。默认为进制为10。如果最初的数字是为0x
或0X,这是进制为16。如果最初的数字是0,这是进制8。 Integer, %i
signed
64位值,进制为10,8,或16 %ld or %li
10进制 %u
8进制 %o Integer, %x 16进制 unsigned
64位值,进制为10,8,或16 %lu, %lo, %lx
浮点字段可以包含以下内容(大小写不敏感的话):Inf文件,
- Inf文件,南,或南。 %f
浮点字段可以包含以下内容(大小写不敏感的话):Inf文件, 浮点数 - Inf文件,南,或南。 %e
浮点字段可以包含以下内容(大小写不敏感的话):Inf文件,
- Inf文件,南,或南。 %g
阅读系列的字符,直到找到空白。 %s
阅读任何单个字符,包括空格。 字串 (要读多个字符,指定字段的长度。) %c
只读括号中的字符,直到第一个非匹配字符或空格。 %[...]
可选:
要跳过字段,插入一个星号(*后百分号(,))。例如,要跳过整数,指定,*D
要指定一个字段的最大宽度,插入一个数字。例如,,10C条读取时间刚好10个字符,包括
空格。
若要跳过特定格式的字符集,插入文字字符。例如,要读只能从'圆周率= 3.14159浮点数字',指定一个'格式PI=,f的。
sizeA
A:在输出数组指定维度下列形式之一: inf 阅读该文件的末尾。 (默认) n 阅读最多n个元素。 [m,n] 阅读最多M* n个元素的列顺序。 n可以是inf,但M却不能。 当格式包括了,s,A可以包含超过n列。 N是指元素,而不是字符。 输出参数
A
一个数组。如果格式包括:
只有数字说明符,一个是数字。如果格式包括只有64位有符号整数说明符,一类是int64。同样,如果格式包括只有64位无符号整数说明符,是一类uint64。否则,一类是double。如果sizeA是inf或n,则A是一个列向量。如果输入包含比sizeA元素少,与MATLAB的垫一个零。
只有字符或字符串说明符(,C或,s)中,A是一个字符数组。如果sizeA是inf或N,A是一个行向量。如果输入包含比sizeA字符较少,MATLAB的垫带有字符(0)。
综合运用数字和字符说明符,一个是数字,类 double。 MATLAB的每个字符转换为等价的数值。即使发生这种转换的格式明确跳过所有的数字值(例如,一个'格式,* d,s'的)。
如果不能匹配MATLAB的输入格式,并包含数字的格式和字符说明符,A可以是数字或字符。一个关于MATLAB的价值取决于前处理停止读取类。 count
fscanf读入A 元素的数目
应用举例
阅读文件的内容。 fscanf重用整个文件的格式,所以你不需要控制回路: % Create a file with an exponential table x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt', 'w');
fprintf(fid, '%6.2f %12.8f\n', y); fclose(fid);
% Read the data, filling A in column order % First line of the file:
% 0.00 1.00000000
fid = fopen('exp.txt');
A = fscanf(fid, '%g %g', [2 inf]); fclose(fid);
% Transpose so that A matches % the orientation of the file
A = A';
跳过特定字符的文件,并只返回数字值:
% Create a file with temperatures tempstr = '78?F 72?F 64?F 66?F 49?F';
fid = fopen('temperature.dat', 'w+'); fprintf(fid, '%s', tempstr);
% Return to the beginning of the file frewind(fid);
% Read the numbers in the file, skipping the units
% num_temps is a numeric column vector
degrees = char(176);
num_temps = fscanf(fid, ['%d' degrees 'F']);
fclose(fid);