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. 从此web开发so easy!

    ECharts (Enterprise Charts 商业产品图表库) 基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图 ...

  2. vue element-ui 通过v-for渲染的el-form-item组件,使用自带的表单验证

    HTML: <el-form ref="newTermDetail" :model="newTermDetail" class="auto_fo ...

  3. git Please move or remove them before you can merge.

    git clean -d -fx "" 其中  x -----删除忽略文件已经对git来说不识别的文件 d -----删除未被添加到git的路径中的文件 f -----强制运行

  4. WPF客户端实现.net升级

    客户端.net版本由3.5升级到4.5,首先把.net4.5的离线安装包添加到资源,程序运行的时候,从资源中生成离线安装包,并通过传递参数的方式执行静默安装命令,具体代码如下: private sta ...

  5. Vue(一) 数据绑定和第一个Vue应用

    学习 Vue.js 最有效的方法是查看官网文档 数据绑定和第一个Vue应用 先从一段简单的 HTML 代码开始,感受 Vue.js 最核心的功能. <!DOCTYPE html> < ...

  6. Gameobject.Find和Transform.Find应用区别

    using UnityEngine;using System.Collections; public class test : MonoBehaviour{ private GameObject ro ...

  7. python 学习 模块

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就越来越长,越来越不容易 维护, 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  8. java Calendar类得到每个月的周末是几号的工具方法

    public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...

  9. VSTO:使用C#开发Excel、Word【8】

    office加载项Office开发中使用的第二种模式是加载项模式.本书涵盖了几种Office加载项.其中包括Outlook的VSTO加载项,Excel和Word的COM加载项以及Excel的自动化加载 ...

  10. Invalid MEX-file: caffe.mexa64 的解决方案

    http://blog.csdn.net/iamzhangzhuping/article/details/53105708