六、MATLAB入门—文件操作

2023-11-15

文章目录

前言

一、文件的打开与关闭

1.1、文件的打开

1.2、文件的关闭

二、文件的读写操作

2.1、二进制文件的读写操作

2.2、文本文件的读写操作

三、数据文件定位

总结


前言

        经过前面一段时间的学习,相信大家已经能较为熟练的在MATLAB软件中进行简单的程序设计了,那么今天就来学习一下MATLAB文件操作,利用MATLAB程序与文本文件进行功能交互。

        文件操作是一种很重要的输入输出方式,即从数据文件中读取数据或者将计算结果写入数据文件。MATLAB提供了一系列底层输入输出函数,专门用于文件操作。MATLAB文件操作主要有3个步骤,首先是打开文件,然后是对文件进行读或者写操作,最后要关闭文件。


一、文件的打开与关闭

1.1、文件的打开

        在进行文件的读写操作之前,首先要用fopen函数打开文件,并指定允许对该文件进行的操作,也就是打开方式。

fopen函数的调用格式为:

                        fid = fopen(文件名,打开方式)

例如,打开一个名为data.txt的文件,并进行读操作,其命令为:

        fid = fopen('data.txt','r')

        其中fid是用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对给数据文件进行操作。如果句柄值大于0,则说明文件打开成功;若打开文件失败后,fid返回值为-1,此时不能对文件进行任何操作。但是有3个标准代码文件,不需要打开就可以直接使用,句柄值分别为fid = 0,代表标准输入文件,一般指键盘;fid = 1表示标准输出文件,通常为显示器;fid = 2表示错误输出信息文件,一般也为显示器。

        文件名用字符串形式,表示待打开的数据文件。

常见的打开方式有:

① 'r' :表示打开文件读数据,被打开的文件必须存在;

② 'w':表示对打开的文件写数据,若文件不存在,系统会自动建立新文件;

③ 'a' :表示在打开的文件末尾添加数据,若文件不存在,系统会自动建立新文件;

④ 'r+' :表示对打开的文件既可以读数据,又可以写数据,文件必须存在;

⑤ 'w+':表示对打开的文件既可以读数据,又可以写数据,若文件不存在,建立新文件;

⑥ 'a+' :表示对打开的文件既可以读数据,又可以写数据,还可以在文末添加数据,若文件不存在,系统会自动建立新文件。

        注意:文本数据格式有两种形式:二进制文件和文本文件;fopen默认打开的是二进制文件,如果要打开文本文件,就需要在打开方式字符串后面加一个字符t,如'rt‘就表以只读方式打开文本格式的数据文件。

1.2、文件的关闭

        文件在进行完读、写等操作后,应及时关闭。

关闭文件用fclose函数,其调用格式为:

                        sta = fclose(fid)

        该函数关闭fid所表示的文件,sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。

二、文件的读写操作

2.1、二进制文件的读写操作

1、读二进制文件

        fread函数可以读取二进制文件的数据,并将数据存入矩阵。

fread的调用格式为:[A,COUNT] = fread(fid,size,precision)

        其中A用于存放读取的数据,COUNT返回所读取的数据个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以为:

        ① N:表示读取N个元素到一个列向量;

        ② Inf:表示读取整个文件;

        ③ [M,N]:表示读取数据到M*N的矩阵中,数据按列存放。

precision代表读写数据的类型,常用的数据类型如下:

标识符

说明

标识符

说明

‘char’

有符号字符

‘int’

32位有符号整数

‘uchar’

无符号字符

‘uint’

32位无符号整数

‘schar’

有符号字符

‘float’

32位浮点数

‘int8’

8位有符号整数

‘float32’

32位浮点数

‘int16’

16位有符号整数

‘float64’

64位浮点数

‘int32’

32位有符号整数

‘long’

32位或64位有符号整数

‘int64’

64位有符号整数

‘ulong’

32位或64位无符号整数

‘uint8’

8位无符号整数

‘short’

16位有符号整数

‘uint16’

16位无符号整数

‘ushort’

16位无符号整数

‘uint32’

32位无符号整数

‘double’

64位双类型数

‘uint64’

64位无符号整数

         以上例子就是以读的方式打开数据文件std.dat,然后按长整型数据格式读取该文件的前100个数据放入向量A,最后关闭文件。

2、写二进制文件

        fwrite函数可以按照指定的数据类型将矩阵中的元素写入到文件中。

fwrite函数的调用格式为:

                COUNT = fwrite(fid,A,precision)

        其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。

        以上例子所表述的就是将矩阵X中的数据以浮点数的格式写入data.bin文件。 

2.2、文本文件的读写操作

1、读文本文件

        fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。

fscanf函数的调用格式为:

                [A,COUNT] = fscanf(fid,format,size)

        其中A用以存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用以控制读取的数据个数,由%加上格式符组成,size为可选项。

常见的格式符有:

        ① d :读入整型数据;

        ②  f :读入浮点型数据;

        ③ c :读入字符型数据;

        ④ s :读入字符串;

        在%之后还可以加上数据宽度,例如%3d,它控制读取数据取3位数字。

2、写文本文件

        fprintf函数可以将数据按指定格式写入到文本文件中。

fprintf函数的调用格式为:

        COUNT = fprintf(fid,format,A)

        其中A存放要写入文件的数据,先按format指定的格式将数据矩阵A格式化,然后写入到fid所指定的文件,格式符与fscanf函数相同。

三、数据文件定位

        当打开文件并进行数据的读写时,需要判断和控制文件的读写位置,例如判断文件数据是否读完,或者需要读写指定位置上的数据等。MATLAB提供了与文件定位操作有关的函数fseek和ftell。通过这两个函数用户可以设定或获取文件指针位置。

fseek函数的调用格式为:

                status = fseek(fid,offset,origin)

        其中fid为文件句柄,offest表示位置指针相对移动的字节数,若为正整数表示向文件尾方向移动,若为负整数表示向文件头方向移动,origin表示位置指针移动的参照位置,它的取值有3种可能:

                        ① cof :表示文件的当前位置;

                        ② bof :表示文件的开始位置;

                        ③ eof :表示文件的结束位置;

        若定位成功,status返回值为1,否则返回值为-1。

ftell函数的调用格式为:

                position = ftell(fid)

        返回值为从文件开始到指针当前位置的字节数,若返回值为-1表示获取文件当前位置失败。


总结

        今天学习了数据文件在MATLAB中的操作,包括二进制文件和文本文件的读写操作,以及如何定位数据文件的位置。经过这一部分的学习,我们就可以将MATLAB与文本文件进行联系起来了,就可以做一些任务开发了,比如利用MATLAB分析文本文件中的数据,根据数据来做算法等等!当然这些都是后话啦,现在基础还没牢固,还是先学爬再学走吧,加油!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六、MATLAB入门—文件操作 的相关文章

  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • ROC曲线和libsvm

    给定一条 ROC 曲线plotroc m see here http www csie ntu edu tw cjlin libsvmtools roc curve for binary svm 理论问题 如何选择要使用的最佳阈值 编程问题

随机推荐

  • postman使用技巧

    文章目录 postman使用技巧 动态获取token 1 使用restful API接口登录设备 2 添加token变量 3 添加token判断 postman使用技巧 动态获取token 1 使用restful API接口登录设备 2 添
  • 毕业设计-基于协同过滤算法的个性化推荐系统

    目录 前言 课题背景和意义 实现技术思路 一 预备知识 二 基于SlopeOne的协同过滤推荐优化算法 三 基于改进 的协同过滤推荐优化算法 四 结论及展望 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为
  • Exception:两个类具有相同的 XML 类型名称,请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称...

    两个类具有相同的 XML 类型名称 http service webservice base xm searchAccountBatchResponse 请使用 XmlType name 和 XmlType namespace 为类分配不同
  • MyBatis choose、when和otherwise标签简介说明

    转自 MyBatis choose when和otherwise标签简介说明 MyBatis 中动态语句 choose when otherwise其功能 同Java中的switch case default语句相同 但是因为MyBatis
  • stata 线性回归分析基本操作

    一 线性回归基本命令 regress y x1 x2 红色表示该命令可简写为红色部分 以 Nerlove 数据为例 数据附后文 regress lntc lnq lnpf lnpk lnpl 表上半部分为方差分析表 包括回归平方和 残差平方
  • python对excel增删改查语句_python对 MySQL 数据库进行增删改查的脚本

    coding utf 8 import pymysql import xlrd import codecs 连接数据库 conn pymysql connect host 127 0 0 1 port 3306 user root pass
  • 不显示头像服务器问题,完美解决Gravatar头像不显示的问题

    最近一段时间 感觉我的博客打开速度很慢 页面总是加载不完 仔细检查发现gravatar头像不显示了 再一搜才知道原来gravatar的头像服务器被那啥了 对于隔三差五出现这种情况 相信各位已经无力吐槽 只能在心里默念一句 祝病魔早日 原博主
  • HarmonyOSd第一次任务

    JS FA 应用的 JS 模块 entry src main js module 的典型开发目录结构如下 目录结构中文件分类如下 hml 结尾的 HML 模板文件 这个文件用来描述当前页面的文件布局结构 css 结尾的 CSS 样式文件 这
  • Centos 磁盘根目录扩容

    Centos磁盘根目录扩容 1 扩容前检查 命令 df Th or df h 我们要扩张磁盘空间的就是挂载点为 的这个 2 添加sda磁盘空间查询磁盘 命令 fdisk l 其实 我们可以将sda的磁盘新增空间分配给处于sda的 挂载目录
  • 折线图横坐标怎么设置_Excel折线图的横坐标如何设置?方法超简单,赶快学起来...

    在我们平时使用Excel表格来进行各种数据的编辑工作时 我们往往会因为某一些实际的需求 需要在表格当中插入一些图表 以此来更加清晰 直观的展现此时表格数据当中的内容 而在Excel表格当中插入折线图 相信这是很多小伙伴都会做的工作 尤其是想
  • TCL变量

    目录 简单变量 数组 相关命令 set unset append和incr 简单变量 一个 TCL 的简单变量包含两个部分 名字和值 名字和值都可以是任意字符串 例如一个名为 1323 7 hdgg 的变量在 TCL 中都是合法的 不过为了
  • SSD,PCI-E,NVMe,M.2分类详解

    SSD PCI E NVMe M 2分类详解 首先说一下目前固态硬盘常用的两个接口 与主板相连的接口形状 SATA3和M 2 1 采用SATA3接口 目前机械硬盘采用的接口方式 的固态硬盘 在传输方式上与SATA3 的机械硬盘一样 速度的提
  • 如何使用Pandas的ExcelWriter进行excel操作

    pandas ExcelWriter定制格式 定制表头 渲染颜色等 非ExcelWriter标准的创建模式 ExcelWriter这个插件有个坑 就是已经设置好的格式是无法更改的 因此 由pandas转成excel的时候 必须将格式清除 尤
  • scanf语句的使用和执行原理

    scanf语句的使用和执行原理 1 如何使用scanf 2 scanf语句的原理 1 如何使用scanf d说明我们现在要读入一个整数了 scanf这个函数会读入一个整数 读到的结果赋值给指定变量 要注意指定变量前面的 scanf d pr
  • VUE中使用高德地图(原生UI,信息窗体内部事件监听)

    VUE中使用高德地图 原生UI 先吐槽一下 本人的环境是基于vue3 0的项目 上一位参与项目的同事使用的事vue amap 因工作需要 另外一位同事去了别的项目 所以这个万恶的项目由本人自己维护 就是再本周新增了需求 根据不用大区的用户进
  • ruoyi若依mybatis升级为mybatis-plus

    一 添加mybatis plus依赖 删除mybatis依赖 根目录下的pom文件 更改前
  • 高可用性H.A.(High Availability)

    高可用性 H A High Availability 指的是通过尽量缩短因日常维护操作 计划 和突发的系统崩溃 非计划 所导致的停机时间 以提高系统和应用的可用性
  • html / css 基础面试题 --- 页面导入时,使用link与@import有什么区别?

    页面导入时 使用link与 import有什么区别 标签和 import指令都可以用于在HTML文档中导入CSS样式表 尽管它们都可以实现相同的目的 但它们之间还是存在一些差异 1 加载顺序 当浏览器解析到标签时 会立即下载并应用样式表 这
  • Sigmoid函数使用教程

    Sigmoid函数是一种常用的激活函数 它将输入值映射到一个范围在0到1之间的连续输出 Sigmoid函数的公式如下 scss f x 1 1 exp x 以下是使用Sigmoid函数的Python示例代码 pythonCopy code
  • 六、MATLAB入门—文件操作

    文章目录 前言 一 文件的打开与关闭 1 1 文件的打开 1 2 文件的关闭 二 文件的读写操作 2 1 二进制文件的读写操作 2 2 文本文件的读写操作 三 数据文件定位 总结 前言 经过前面一段时间的学习 相信大家已经能较为熟练的在MA