matlab写入txt文件进行自动化测试总结:fopen、fclose和fprintf的用法

news/2024/4/28 23:15:09/文章来源:https://blog.csdn.net/subtitle_/article/details/130720221

前言

日常学习的过程中使用了matlab读写txt文件,记录一下基本函数的使用,本文主要介绍了fopenfclosefprintf几个函数,这些主要是面向txt格式的文件保存数据。还有其他几个函数,比如freadfwrite,用过但是他们是针对写二进制文件的,写在txt文件中会出现乱码,所以这里就不介绍了。

前面是对fopenfclosefprintf函数的介绍,后面给了一个我的自建demo可以运行

fopen 函数

fopen的基本语法:

fid = fopen(filename, permission)

如果fid=-1,说明打开失败,查看文件是否存在。

在这里插入图片描述
注意MATLAB 默认打开的是二进制文件。

如果文件以文本格式打开,那么一个“t”就应加入到 permission 字符串中(例如“rt”或“rt+”)。

1. 以只读模式打开文件

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

权限(permission)字符串是“r”,它指出这个文件的打开方式为只读。找不到文件会报错

注意这样打开的是二进制文件,不是txt文件。默认是二进制,permission我们用的是’r’,其实是‘rb’。

2. 以写入模式打开文件

使用txt文件最常用的语句!

fid = fopen('file.txt','wt')

权限(permission)字符串是“wt”,它指出这个文件的打开方式为写入,指定这个文件为新建文本文件。如果这个文件已存在,那旧文件就会被删除,打开新建的文件等待写入数据。如果我们要替换先前已存在的数据,那么就可以采用这个形式。

fid = fopen('file.txt','at')

权限(permission)字符串是“at”,它指出这个文件的打开方式为写入,指定一个我们想要增加数据的文本文件。如果这个文件已经存在了,那么它将会被打开,新的数据将会添加到已存在的数据中。如果我们不想替换已存在的数据,那么就可以采用这个方式。

3. 以读写模式打开文件

fid = fopen('file.txt', 'r+')

权限(permission)字符串是“r+”,它指出这个文件的打开方式为读写,找不到文件会报错。

fid = fopen('file.txt','w+')

权限(permission)字符串是“w+”,它指出这个文件的打开方式为读写,指定这个文件为新建文本文件。如果这个文件已存在,那旧文件就会被删除,打开新建的文件等待写入数据。如果我们要替换先前已存在的数据,那么就可以采用这个形式。

fid = fopen('file.txt','a+')

好的编程习惯

  • 在使用 fopen 语句时,一定要注意指定合适的权限,这取决于你是要读取数据,还是要写入数据。好的编程习惯可以帮助你避免(类似于覆盖的)错误

  • 在文件打开操作后检查它的状态以确保它被成功打开。如果文件打开失败,提示用户解决方法。

fclose 函数

fclose把以户自定义格式编写的格式化数据写入一个文件。它的形式为

status = fclose(fid)
status = fclose('all')

其中 fid 为文件标识,status 是操作结果,如果操作成功,status 为 0,如果操作失败,status 为-1。

函数 status = fclose(‘all’)关闭了所有的文件,除了 stdout(fid = 1)和 stderr(fid = 0)。如果所有的文件关闭成功,status 将为 0,否则为-1。

fprintf函数

fprintf函数用于进行写入字段,类似于C语言的printf函数,语法很好懂,我这里使用的是下面的格式写入到我的txt文件当中。

count = fprintf(fid, format, val1, val2, ...)
fprintf(format, val1, val2, ...)

其中fid是我们要写入数据那个文件的文件标识,format是控制数据显示的字符串。如果fd丢失,数据将写入到标准输出设备(命令窗口)。这些格式已经在第二章介绍过。
格式(format)字符串指定队列长度,小数精度,域宽和输出格式的其他方面。它包括文字数字字符(%)和字符序列(用于指定输出数据显示的精确格式)。一个典型的数据输出格式字符串图81所示。字符%总是标志着格式化字符串的开始,在字符%之后,这字符串应包括一个标识(fg),一个域宽,一个精度指定符和一个转换指定符。字符%,转换指定符一般会要求出在任何格式中,而标识,域宽,精度指定符是可选的。
在这里插入图片描述

可能的转换指定符

在这里插入图片描述
可能的修改符
在这里插入图片描述
转义字符
在这里插入图片描述

格式转字符串的理解

还是用之前的图:

在这里插入图片描述

如果我们用格式化字符串指定域宽和精度,那么小数点前的数就是域宽,域宽是所要显示的数所占的字符数。小数点后的数是精度,是指小数点后应保留的位数。这样说不直观,我们看一些例子:

1. 显示十进制整数数据

显示十进制整数数据要用到%d 格式转换指定符。如果需要的话,d 可能出现在标识(flag),域宽和精度指定符之前。如果有用的话,精度指定符可以指定要显示的数据的最小数字个数,如果没有足够多的数字,那么 MATLAB 将在这个数之前添加 0。
在这里插入图片描述
如果用格式指定符%d 显示一个非十进制数,这个指定符将会被忽略,这个数将会以科学计算法格式显示。例如

fprintf('%6d\n',123.4)

将产生结果 1.234000e+002。

2.显示浮点数数据

浮点数数据的显示要用到%e,%f。,%g 格式转换指符。如果需要的话,这些格式转换指符可能出现在标识(flag),域宽和精度指定符之前。如果指定的域宽太小了,不能显示这个数,则这个域宽是无效的。否则,则应用指定的域宽。
在这里插入图片描述

3.显示字符数据

字符数据的显示要用到%e,%c 格式转换指符。如果需要的话,这些格式转换指符可能出现在标识(flag),域宽和精度指定符之前。如果指定的域宽太小了,不能显示这个数,则这个域宽是无效的。否则,则应用指定的域宽。
在这里插入图片描述

注意
应该保证 fprintf 函数中的数据类型与格式字符串中的格式转换指定符的类型要一一对应,否则将会产生意料之外的结果。

我的使用方法(自用)

日常需要写一个测试,测试不同参数下的各种指标,然后把指标输出到txt文件中,按照

txt_write_condition.m:txt文件初始化参数条件

function txt_write_condition(txtName,para,mode)filename=[txtName,'.txt'];fileID = fopen(filename,mode);fprintf(fileID,'parameter=%f\n',para);fprintf(fileID,'%s:','Max error');fclose(fileID);
end

txt_write_data.m:txt文件写入数据

function txt_write_data(txtName,para)filename=[txtName,'.txt'];fileID = fopen(filename,'a+');fprintf(fileID,'%f\n\n',para);fclose(fileID);
end

main.m:主函数

n=10;%10次测试,写一个for循环
para=linspace(0.1,1.0,10);%测试10个参数的指标
for k=1:ntxtname = 'res1';%定义文件的名字,txt文件为res1.txt,可以自定义if k==1mode='w+';%写入模式,原来有res1.txt文件覆盖重新写入elsemode='a+';%继续后面的写入,不要覆盖原来的文件end%读写txt函数初始化:写入参数条件txt_write_condition(txtname,para(k),mode);%%%%%%%%%%%%%%%%%%%%%假设获取了指标最大运行时间:max_timemax_time=exp(k);%%%%%%%%%%%%%%%%%%txt_write_data(txtname,max_time);
end

结果

输出结果

在这里插入图片描述

fopenfclosefprintf函数的说明摘录自,比起matlab文档要详细很多,希望对大家有帮助!!!

[1] S.J.Chapman《MATLAB编程》中文版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_303097.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于江苏专转本的十大真相,值得一看

【真相1】专转本考试题主要是大学相关科目的骨干老师出的。他们较长时间从事相应课程教学,专业领域较宽,学术造诣较高。具有副高及以上职称,年龄—般在55周岁以下。VX:hhkb5200【真相2】专转本考试题"紧扣《考试大纲》,大家要…

【Arduino疑难杂症】:报错:上传失败:上传错误:exit status Oxffffffff

项目场景: 制作arduino宠物监控系统项目的过程中,摄像头方面使用到了ESP32Cam,制作过程中遇到了如下问题。 问题描述 [ERRORJ: (annot configure port, something wert wrong. 0riginal message: WindowsError(31,"xclxacxb…

【研发工具】Yapi接口管理平台内网Centos8下搭建

1 环境依赖安装 环境要求 nodejs(7.6) (本文安装12.18.3) mongodb(2.6)(本文安装5.0.17) 1.1 安装Nodejs 1.1.1 下载安装包 下载地址:https://nodejs.org/zh-cn/download/这里下载…

pnpm命令介绍

一、安装pnpm npm install -g pnpm 二、设置镜像源 pnpm config set registry https://registry.npm.taobao.org/ # 检查 pnpm config get registry 三、常用命令 # 查看ts-node的所有版本 pnpm view ts-node versions # 等价与npm i nodemon -g pnpm add nodemon -g # npm i p…

OMG Data Distribution Service(DDS)规范解读-Part4

目录 2.4 Listeners, Conditions, and Wait-sets2.4.1 Communication Status2.4.2 Changes in Status2.4.2.1 Plain communication statuses2.4.2.2 Read Communication Statuses 2.2.4.3 Access through Listeners2.2.4.3.1 Listener Access to Plain Communication Status2.2…

chatgpt赋能Python-python3_8怎么安装matplotlib

Python3.8怎么安装Matplotlib Matplotlib是一个非常流行的Python可视化库,它可以用来创建各种类型的图形,包括线图、散点图、直方图、饼图和热图等等。在本文中,我们将介绍如何在Python3.8中安装Matplotlib,以及如何使用它来绘制…

chatgpt赋能Python-python3_7_1如何使用

Python 3.7.1使用指南 Python自从出现以来,已经成为了一个非常流行的编程语言,每年都会更新版本以满足不断变化的市场需求。其中最新版本是Python 3.7.1,它与其前身相比提供了许多改进和新功能,同时也解决了一些已知的问题。本文…

Spark大数据处理讲课笔记4.6 Spark SQL数据源 - JDBC

文章目录 零、本讲学习目标一、Spark SQL读取关系数据库二、Spark SQL JDBC连接属性三、创建数据库与表(一)创建数据库(二)创建学生表(二)创建成绩表 四、读取和写入数据库表(一)利用…

Xcode真机运行报错:Failed to prepare the device for development解决方法

一、遇到的问题 运行Xcode然后打包APP,结果Xcode报错,如下: Failed to prepare the device for development. This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You …

macOS Ventura 13.4 (22F66) 正式版发布,ISO、IPSW、PKG 下载

本站下载的 macOS Ventura 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 请访问原文链接&#xff1a…

chatgpt赋能Python-python3_8_5安装后怎么打开

Python3.8.5安装后怎么打开:简易步骤指南 Python是一种高级编程语言,被广泛用于数据分析、机器学习、自动化、网络编程等多个方面。Python语言优雅简洁,易于上手,是编程初学者的最佳入门语言之一。本文将介绍Python3.8.5版本的安…

管道通信,共享内存

什么是有名管道 有名管道(Named Pipe)是一种特殊的文件类型,也称为 FIFO。它提供了一种进程间通信的机制,允许不相关的进程通过读写共享的文件来交换数据。 与普通文件不同的是,有名管道在文件系统中存在一个路径名&…

redis单机版本Java代码实践

pom依赖 引入redis的starter以及commons-pool2的依赖&#xff0c;commons-pool2是配置连接池需要使用的&#xff0c;不引入&#xff0c;只有连接池配置是不会创建连接池的 <!-- redis --><dependency><groupId>org.springframework.boot</groupId><…

基于协同过滤的推荐算法

基于协同过滤的推荐算法 基于协同过滤&#xff08;CF&#xff09;的推荐基于近邻的协同过滤基于用户的协同过滤&#xff08;User-CF&#xff09;基于物品的协同过滤&#xff08;Item-CF&#xff09;User-CF 和 Item-CF 的比较基于协同过滤的推荐优缺点基于模型的协同过滤隐语义…

python类的高级函数

类的高级函数 __str__ 如果定义了该函数&#xff0c;当print当前实例化对象的时候&#xff0c;会返回该函数的return信息 用法&#xff1a; def __str__(self): return str_type 参数&#xff1a;无 返回值&#xff1a;一般返回对于该类的描述信息 __getattr__ 当调用的…

JavaWeb-RequestResponse的使用

Request&Response 今日目标 掌握Request对象的概念与使用掌握Response对象的概念与使用能够完成用户登录注册案例的实现能够完成SqlSessionFactory工具类的抽取 1&#xff0c;Request和Response的概述 Request是请求对象&#xff0c;Response是响应对象。这两个对象在我们…

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-7

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-7 类文件结构概述无关性的基石 虚拟机类加载机制概述类加载的时机 类文件结构 代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步 概述 我们写的程…

在阿里做了6年软件测试,4月无情被辞,想给划水的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入阿里&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是6年的工作经验吧。 这6年之间完成了一次…

060:cesium设置网格Grid材质

第060个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置网格材质,请参考源代码,了解GridMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共93行)相关API参考:专栏目标示例效…

chatgpt赋能Python-python3_9_6怎么用

Python 3.9.6简介 Python 3.9.6是2021年6月28日发布的Python编程语言的最新版本&#xff0c;它提供了一些有用的新功能和改进&#xff0c;包括优化的解释器性能和可变构造体。它是一种功能强大的编程语言&#xff0c;既易于学习又易于使用&#xff0c;非常适用于开发Web应用程…