1、基本语法
textscan的基本语法是:
C = textscan(fid, 'format')
  
C = textscan(fid, 'format', N)

其中fid为fopen命令返回的文件标识符,这也是和textread的最大不同之处,需要注意的一点是,fid类似一个指针,其指向的位置会随着textscan的操作而改变,每读取一次数据,它的位置就会指向你已经读过的那个数据的后面。format实际上就是一个字符串变量,表示读取数据及数据转换的规则。N为按照读取格式format读取的次数。

textread的基本语法是:

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

[A,B,C,…] = textread(filename,format,N)
其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
必须严格遵守用法不可出现data=textread(filename,format,N)的形式

其中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,…] = textread(filename,format,N)的语法,读取N次。

2,两者的区别

可以看出这个两个函数最大的区别就是:textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。而使用textscan函数之前需要先用fopen函数打开要读取的文件并返回句柄fid。

其次textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。而textscan函数每次读完数据后,其对应的句柄fid都是指向接下来要读数据的地方,类似于C函数中的文件读取指针,这样更方便于读取文本时的精确控制。

再次,textscan函数可以将多组数据读到一个元胞矩阵中,而textread函数只能将数据分别读取到不同的向量中。比如一个含有10行3列浮点数的文件,textscan函数可以将之读取到一个变量名A下 A=textscan(fid, '%f%f%f'), 而使用textread函数必须将之读入到三个变量名中  [A,B,C] = textread(filename,'%f%f%f')。

3,几个方便的语法

假设文件myfile.txt 中的内容如下

Sally Type1 12.34 45 Yes

Joe Type2 23.54 60 No

Bill Type1 34.90 12 No

3.1将其分别使用textread 和textscan读出:

[data1 data2 data3 data4 data5] = textread('myfile.txt','%s%s%f%d%s');使用textread函数分别将数据按照格式读入到data1—data5中。然后可使用赋值语句data=[data1 data2 data3 data4 data5 data6]生成一个二维数组data。

fid = fopen('myfile.txt');

C = textscan(fid, '%s%s%f%d%s');

fclose(fid);使用textscan函数读取文件,输出C为1*5的细胞数组,每个数组中存放每列的数据

3.2如果只读取第一列的数据,可使用如下语句:

[names]=textread('myfile.txt','%s%*[^n]');

%*[^n] 表示从当前直接跳到行尾,而使用%[^n]则表示一直读到行尾,% *是一个跳过符号,表示跳过该位。例如在读取上述文件过程中只读取浮点数的整数位,可使用如下两种语句,将小数点在内的小数部分看作浮点数或者字符串,读取是略过。

[data1 data2 data3 data4 data5] = textread('myfile.txt','%s%s-%*f%d%s');

或者

[data1 data2 data3 data4 data5] = textread('myfile.txt','%s%s-%*s%d%s');

3.3另外如果我想略过若干行之后才开始读取数据的话,可以使用headerlines命令定义略过的行数。如果数据之间不是使用空格作为分隔符的话,可以使用delimiter命令定义各种分隔符。

'headerlines',1,'delimiter',';'

3.4如果我想读取文件中70行70列的文件该怎么办呢? 当然我们可以在函数中format处写上70个%f,但这样太麻烦了。有一种简单的方法就是使用下面的函数。

FormatString=[repmat(' %f',1,70)];
ez = cell2mat(textscan(f1,FormatString,70,'HeaderLines',3));

第一句话表示定义一个含有70个%f的字符串,第二句话的意思是 将此字符串作为读取格式,按照这个格式读取70次,并忽略文件中的前三行。 由于textscan只是把数据读到了一个元胞数组中了,需要使用cell2mat函数将这里面的所有 cell组合成一个数组。

暂时以上叙述到的东西应该够我今后进行数据处理了。如果想阅读更为详细的说明的话,除了matlab的帮助文档外,以下几篇日志也非常不错:

textscan
http://blog.sina.com.cn/s/blog_9e67285801010buf.html
http://www.douban.com/note/6181453

textread
http://itlab.idcquan.com/linux/administer/872894.html
http://blog.sina.com.cn/s/blog_9e67285801010bju.html

【转】matlab的textscan与textread区别的更多相关文章

  1. Matlab中double,im2double,mat2gray区别

    转载:http://blog.sina.com.cn/s/blog_6c41e2f30101559d.html ****************假设某图像数据A(uint8格式)*********** ...

  2. MATLAB axis和axes的区别

    axis中文为“轴”之意,在matlab中用于控制坐标轴的范围和样式(颜色等). axis([XMIN XMAX YMIN YMAX]) 设置当前所绘图像的x轴和y轴的范围.axis([XMIN XM ...

  3. [转] matlab saveas 和imwrite的区别

    http://hi.baidu.com/curbzz/item/04a69e805fc334e3e596e035 saveas(handle,['目录','文件名']) 如果只有一幅图,handle设 ...

  4. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  5. Matlab中一些函数的区别

    1.fix, floor,ceil,round   都是对x取整,但取整方向不同.   fix(x):向0取整(也可以理解为向中间取整)   floor(x):向左取整(从名字看,地板,表示下面) c ...

  6. Matlab中的数据类型

    Matlab中有15种基本数据类型,主要是整型.浮点.逻辑.字符.日期和时间.结构数组.单元格数组以及函数句柄等.         1.整型:(int8:uint8:int16:uint16:int3 ...

  7. MATLAB随机森林回归模型

    MATLAB随机森林回归模型: 调用matlab自带的TreeBagger.m T=textread('E:\datasets-orreview\discretized-regression\10bi ...

  8. matlab vs python

    (参考)从下图可以清晰看到matlab和python之间的区别 Python是一种编程语言,但与其他变成语言的不同在于:python具有许多的扩展库(通过import引入) Matlab是集合计算环境 ...

  9. 计算机辅助数据绘图(matlab\python\js)

    1. matlab绘图 官方说明:https://ww2.mathworks.cn/help/matlab/creating_plots/types-of-matlab-plots.html 基本图形 ...

随机推荐

  1. 把旧系统迁移到.Net Core 2.0 日记(8) - EASYUI datagrid+ Dapper+ 导出Excel

    迁移也没太大变化,有一个, 之前的Request.QueryString 是返回NameValueCollection, 现在则是返回整个字符串. 你要改成Request.Query[“key”] 直 ...

  2. 码云git使用二(从码云git服务器上下载到本地)

    假如我们现在已经把项目添加到码云git服务器了. 我们现在需要通过studio工具把码云git服务器上的某个项目下载到本,并且运行. 1.打开码云网页,找到对应项目的git路径. 2.打开studio ...

  3. 尚学堂java 答案解析 第六章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.C 解析:对void下的函数,可以使用"return;"表示结束之意,但不能&q ...

  4. 【原创】QT 打印输出

    list类 qDebug 的两种用法 #include <QDebug> int main(int argc,char *argv[]) { QList<int> list; ...

  5. Java:将数据库数据导出到Excel (一眼就看会)

    所用Jar包 1. sqljdbc4.jar 连接数据库的Jar包(根据数据库的不同进行选择,我用的SqlServer2008) 2.Jxl.jar 访问Excel的Jar包 注意:支持以.xls结尾 ...

  6. RabbitMQ 设置消息的TTL(过期时间)

    我们在RabbitMQ中发布消息时,在代码中有两种方法设置某个队列的消息过期时间: 1.针对队列来说,可以使用x-message-ttl参数设置当前队列中所有消息的过期时间,即当前队列中所有的消息过期 ...

  7. javascript进阶笔记(1)

    学习js已经有一段时间了,大大小小还是能够做出一些东西来.不过觉得可惜的是,还是对js本身这门语言不是很熟悉,总有一点雾里看花的感觉,看得见,但是看不清楚.最近发现有一本关于js的叫做<忍者秘籍 ...

  8. 《Python》常用内置模块

    一.time模块(时间模块) 三种格式: 1.时间戳时间(timestamp):浮点数,秒为单位,从1970年1月1日0时距今的时间 1970.1.1  0:0:0 英国伦敦时间(开始时间) 1970 ...

  9. TLS反调试

    0x01 TLS反调试简介 TLS(Thread Local Storage)原本的目的是解决多线程程序中变量同步的问题.线程本身有独立于其他线程的栈空间,因此线程中的局部变量不用考虑同步问题.多线程 ...

  10. DevExpress v18.1新版亮点——Reporting篇(三)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Reporting v18.1 的新功能,快来下载试用新版本 ...