EDA365电子论坛网

标题: MATLAB读取文本文件之fscanf函数 [打印本页]

作者: pulbieup    时间: 2021-4-27 10:10
标题: MATLAB读取文本文件之fscanf函数
9 c. `' X7 C7 j; t$ o
fscanf6 F( F. O+ Y& n. \" d- g" D
按指定格式从文本文件中读取数据。用法:. S. P  ]3 h( c9 |) q/ i! Q8 @
- q! U# ?( k/ j- l1 b' `

' g* s; S) @' u& A8 Z7 [$ ~& B: U
所要读取的文本文件被文件标识符 fileID 标识,通过 fopen 函数可以获取文件的 fileID。当结束读取时,一定要记得使用 fclose 函数关闭文件。 * e; q. U0 x4 D1 K8 _
光看函数的用法介绍可能会比较难懂,通过下面的例子会比较容易理解。 例:文本文件 test.txt 包含以下数据:3 _3 c. T  o* U$ W
16。2。3。13, p) \" G; k6 @0 l
5。11。10。8
0 g+ K4 Z& P6 B  e9。7。6。12- L4 C; o; o" M
4。14。15。1
. z/ M5 L/ V6 G  m* R& b$ Z* z/ \( f0 j* K
0 `7 v1 Y1 P7 b& C  e: n0 N' u6 Q

* z9 b0 [% r5 ?# J0 h8 Y1 ^下面详细解释一下 fscanf 的读取原理: ) d8 Z6 q4 K7 G: r
5 n8 @" t7 i2 Z1 Z$ P
当用 fopen 打开文件时,会有一个文件指针在文件开头。fscanf 通过你设定的格式字符串 formatSpec 来读取数据(formatSpec 由字符串和转义说明符组成,其中转义说明符由 % 开头,以转换字母结尾。上面的例子中 %d 就是一个转义说明符,代表一个整数,常用的还有%f、%s,分别代表浮点数和字符串)。formatSpec 第一个字符块为转义说明符 %d,那么 fscanf 会先将第一个整数16读入进 A,之后文件指针跳至16右边,formatSpec 第2个字符块是字符串’。’,由于它不是转义说明符,文件指针会跳过’。’到达’。’右边。之后再是转义说明符 %d,则将2读入进 A,以此类推。1 j/ B& j0 D5 d2 E
用下面图片进行说明:
5 A  R9 z" X1 j
) P! S" T8 b* C7 M% ]- @ ( v5 g) O/ c- E& _

% E0 x' G  _5 G5 Y3 [  E& @1 T; ]; }% k, g1 {8 b- y
如果将这个例子的读取代码写成:
) e+ l$ I0 Y' z) j- p. ]3 j- _
! L2 x1 @$ E# U) k5 i  q% g+ M; ^; i& C( J" T/ m
将会得到:
( c1 D+ s7 v3 n2 t7 ]' w! l) D; P( t
4 H2 I! w0 M2 k9 u- C4 _$ {8 B

4 n' j! P/ j( o; r原因就是当文件指针读取完13时,formatSpec 需要匹配的字符串是’。’,但是13的下一个字符串是5,匹配失败,fscanf 停止读取。
2 u3 Y/ u9 |. D8 D8 x再以一个比较复杂的文本文件为例:* V: p; t) [# e3 R6 u
例:文本文件test.txt包含以下数据:9 J! M4 }; Y$ S0 K7 ~& {) o0 f
lambda: 7.580000e-05 6 C2 g- `, t1 i8 p+ }
lambdaB: 8.000000e-057 Y  L& C9 b; I) |, D! Q  Z% o
initial pulse width: 7.853636e-13: b( D" F3 o0 u0 u- i" Z
output pulse width: 6.253030e-13- h0 f% t% a# e0 ~
dispersion length: 6.307732e-029 Z4 |! }# F/ R& J- }% a* s
nonlinear length: 9.572495e-01/ s% ^' N* {- g0 t
# G" _# Q; q+ S% a* Q% V* K/ C
lambda: 7.590000e-05
8 ^8 J  ^5 a9 G, U) Y3 dlambdaB: 8.000000e-050 C3 G  @. e2 f0 N" M1 Y) m- b
initial pulse width: 7.848788e-13" D4 `( _# b$ L6 A8 F
output pulse width: 5.778485e-134 x; B. t+ R# k, J  o
dispersion length: 5.852858e-02
0 ^8 e% u& F5 P, d; Wnonlinear length: 9.195277e-01! N+ X/ N0 E/ u0 I: M9 g5 l
8 z0 q3 d' G* I3 e- S" m; X( T) t0 U

5 x7 X  _# k: r) o
0 Z& B9 H! g5 e, W( b2 |, n! L现在想要把所有的数字信息提取出来:. m, p6 z( B; ?. Q6 ]7 t
% \, E9 _" T, q7 e/ T7 H9 D

# T& G, p! _, ^2 z* F! A+ a5 ~
6 B9 ?1 u, ~% X$ p' P+ U1 U+ h( f9 Z1 P- a# k+ @5 _8 V8 K9 I) k2 ~

' D' Q! J4 s" Q& f7 [0 e* i0 v
作者: ExxNEN    时间: 2021-4-27 10:56
MATLAB读取文本文件之fscanf函数




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2