六、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入门—文件操作 的相关文章

  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • 使用 python 在网络上部署 matlab 应用程序

    您好 我想使用 python 在网络上部署 matlab 应用程序 有没有办法做到这一点 我已按照数学工作网站上的文档将我的应用程序转换为 jar 文件 java 类 有人能指出我前进的正确方向吗 事实上 您的 Matlab 代码打包为 J
  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之

随机推荐

  • 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