加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【matlab】textread textscan读取文本文件

(2012-08-23 13:03:10)
标签:

杂谈

分类: MATLAB
http://liangshzh0816.blog.163.com/blog/static/34776762011013111354235/

1.MATLAB从文本文件中读取格式化的数据函数是textread。

调用方式

[A,B,C,...] = textread('filename','format')

[A,B,C,...] = textread('filename','format',N)

[...] = textread(...,'param','value',...)

输入参数

    'filename'               需要读取的数据文件

    'format'                 每行各个数据格式

                          读取数据时使用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

 

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

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

名称

说明

N

读取包括小数点在内的N个数字或者遇到的分隔符,例如%5f32会把473.238读为473.2

N.D

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

 

下面建立新文件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  , 2

32  , 3  , 4

>> tt=fopen('c:\test3.txt');

>>var=textscan(tt,'%f  %f %f', 'delimiter', ',')   % 忽略‘,’

>> aa=cell2mat(var)

aa =

           2

    32        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: 欢迎留言讨论用法.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有