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 |