EDA365电子论坛网

标题: 在matlab中进行textread textscan读取文本文件 [打印本页]

作者: ulppknot    时间: 2020-4-23 10:14
标题: 在matlab中进行textread textscan读取文本文件
1.MATLAB从文本文件中读取格式化的数据函数是textread。
调用方式
[A,B,C,...] = textread('filename','format')
[A,B,C,...] = textread('filename','format',N)
[...] = textread(...,'param','value',...)
输入参数
    'filename'               需要读取的数据文件
    'format'                 每行各个数据格式
    N                        读取数据时使用N次。
当调用textread函数时会按照指定的格式从'filename'中读取数据,并将数据分别保存在变量A,B,C中,直到文件内容被读完为止。
下面是读取c:中的test3.txt文件操作。
>> !type c:test3.txt
Q1 1 2
Q2 3 4
>> [a1 a2 a3]=textread('c:test3.txt','%s %f %f')
a1 =
    'Q1'
    'Q2'
a2 =
     1
     3
a3 =
     2
     4
这样文件test3.txt中的每行分别读入变量a1、a2、a3。
2.TextScan函数读取文本数据
对于具有多行文字说明文本数据文件,最好的办法则是用textscan,或者fscanf读取。
调用方式
C = textscan(fid, 'format')
C = textscan(fid, 'format', N)
C = textscan(fid, 'format', param, value, ...)
C= textscan(fid, 'format', N, param, value, ...)
输入参数
fid           为fopen命令返回的文件标识符
format        是一个字符串变量,表示读取数据及数据转换的规则。Format中包含了多种方式,其内容如表6.5所示。

format内容

数据转换规则
说   明
%n
读取一个数字并转换为double
%d
读取一个数据并转换为int32
读取一个数据并转换为int8
�6
读取一个数据并转换为int16
�2
读取一个数据并转换为int32
�4
读取一个数据并转换为int64
%u
读取一个数据并转换为uint32
%u8
读取一个数据并转换为uint8
%u16
读取一个数据并转换为uint16
%u32
读取一个数据并转换为uint32
%u64
读取一个数据并转换为uint64
读取一个数字并转换为double
�2
读取一个数字并转换为float
�4
读取一个数字并转换为double
%s
读取一个字符串
%q
读取一个可以是双引号括着的字符串
%c
读取一个字符,包括空格
%[…]
读取和括号中字符串相匹配的字符。读取操作在首次遇到不匹配的字符和空格时停止。例如%[mus]把summer读成summ
%[^…]
读取和括号中字符串不匹配的字符。读取操作在首次遇到不匹配的字符和空格时停止。例如%[^mus]把summer读成er

$ G$ I# g+ F; A2 h# h

   Textscan所支持的数字单元宽度声明有两种,具体如表6.6所示。

表6.6   textscan支持的数据读入格式

名称
说明
N
读取包括小数点在内的N个数字或者遇到的分隔符,例如%5f32会把473.238读为473.2
N.D
读取包括小数点在内的N个数字或者遇到的分隔符,返回的数字在小数点后有D位数,例如%7.2f会把473.238读为473.23


" ^4 h# S) T) l+ j* _' V
) Z" s' U( t0 ~3 W
& s9 ^1 r& v+ ]" T. {1 z% `+ U2 Y

4 ], d0 h7 [, ~6 E) Y2 D
  N5 L( l! t& {* M. H* b
' Y( _# A$ A9 i1 w% l# ]( U! \
* @* Y0 U1 H7 @5 }

8 Q0 S$ J# `1 n  p# Q/ T( I; O! @- a6 G' ?  O' y- R7 {2 R8 V
4 {9 A! [; o9 l+ j& j
( z# z5 C0 i( @. q+ F
$ `0 l8 Y& H: ]) Y. B* A' \

! u: R. P6 Z0 z. y' D( |  S1 ?! o5 M* ^0 J) i, U; j
下面建立新文件test1.txt,文件前2行是字符串,后三行是数组,首先查看其内容。
>> !type  c:test1.txt   
a1
a2
1
2
注意,在Command窗口下键入“!”后就可以直接执行Dos命令
>>file=fopen('c:test1.txt','r');%打开需要读取的文件
>> str1=textscan(file,'%s',2) ;
>> str1{1}
ans =
     'a1'
     'a2
如果需要读取第3行、第4行可以执行下面命令。
>> da=textscan(file,'%f',[3 4]) ;
>> da{1}
ans =
      1
      2
由于da是单元数据,下面将其转换为实数型。
>> cell2mat(da)
ans =
     1
     2
如果数据文件中有间隔符,需要忽略间隔符。
>> type c:test3.txt
1   , 1  , 2
32  , 3  , 4
>> tt=fopen('c:test3.txt');
>>var=textscan(tt,'%f  %f %f', 'delimiter', ',')   % 忽略‘,’
>> aa=cell2mat(var)
aa =
     1     1     2
    32     3     4
结束时需要关闭文件
>> fclose(file)
>> !type c:test2.txt
2 5 3 6
2 3 5
1 9 5 4 6
>> fid=fopen('c:test2.txt');
>>for i=1:3 ,a{i}=fgets(fid); end
>>fclose(fid);
ps: 欢迎留言讨论用法.

7 l( Z" F1 ?* K8 H) a
作者: ExxNEN    时间: 2020-4-23 13:22
在matlab中进行textread textscan读取文本文件




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