MATLAB数据文件读写:1.格式化读写文件

devtools/2024/11/10 13:40:34/

格式化读写文件

matlab提供了对数据文件建立、打开、读取、写入、关闭等操作的函数。

数据文件可以分为两类:
  • 文本文件:以ASCII码形式存储的文本文件;编码基于字符定长,译码相对容易
  • 二进制文件:以二进制形式存储的文本文件;编码是变长的,存储灵活、效率高,节省空间;对应比较精确的数据,二进制存储不会造成有效位的缺失;

基本的文件操作函数

  • 打开和关闭文件:fopen、fclose
  • 格式化读写:fscanf、fprintf
  • 文件定位与状态:fseek、ftell、feof、ferror、frewind

(类似c语言)

1.文件的打开

fileID = fopen(fileName);

  • 打开文件filename以便以二进制方式进行读取,并返回等于或大于3的整数文件标识符,作为文件句柄
  • 如果文件无法的打开、不存在,fopen()函数返回-1,并且设置错误标志。
  • matlab保留文件标识符0、1、2分别用于标准输入、输出、错误输出。

fileID = fopen(fileName,permisssion);

  • 打开由permission指定访问类型的文件
permission参数(文件访问类型):
  • ‘r’:以只读方式打开文件,文件必须存在。
  • ‘w’:以写方式打开文件,如果文件不存在,则创建新文件;如果文件存在,则覆盖原有文件。
  • ‘a’:以追加方式打开文件,如果文件不存在,则创建新文件;如果文件存在,则在文件末尾追加内容。
  • ‘r+’:以读写方式打开文件,文件必须存在。
  • ‘w+’:以读写方式打开文件,如果文件不存在,则创建新文件;如果文件存在,则覆盖原有文件。
  • ‘a+’:以读写方式打开文件,如果文件不存在,则创建新文件;如果文件存在,则在文件末尾追加内容。
  • ‘A’:打开文件以追加(但不自动刷新)当前输出缓存区
  • ‘W’:打开文件以写入(但不自动刷新)当前输出缓存区

2.文件的关闭

fclose(fileID);

  • 关闭由fileID指定的文件。
  • 成功关闭文件后,文件标识符fileID将变为-1。

fclose(‘all’);

  • 关闭所有打开的文件。

status = fclose(fileID);

  • 关闭由fileID指定的文件,并返回0表示成功,-1表示失败。

3.文本文件的读写

fprintf;

  • 此MATLAB函数按列顺序将formatSpec应用于数组A1,……,An的所有元素,并将结果写入到一个文本文件。
  • formatSpec是一个格式字符串,它指定了输出的格式。

fprintf(fileID,formatSpec,A1,…,An);

  • 按列顺序将formatSpec应用于数组A1,……,An的所有元素,并将结果写入到由fileID指定的文件中。

fprintf(formatSpec,A1,…,An);

  • 设置数据的格式并在屏幕上显示结果
formatSpec特殊字符:
  • %d:有符号整数

  • %f:浮点数(使用精度操作符指定小数点后的位数)例如:%f表示3.14159,%.2f表示3.14

  • %s:字符串(字符向量或字符串数组)

  • %c:字符

  • %e:指数形式的浮点数(科学计数法,如3.14159e+00)

  • %%:输出一个%符号

  • \n:换行符

  • \t:制表符

  • \b:退格符

  • \r:回车符

  • \v:垂直制表符

  • \ \:输出一个反斜杠

例子:

matlab">x=0:0.1:1;
A=[x;exp(x)];
fid=fopen('data.txt','w');
fprintf(fid,'%6s %12s\n','x','exp(x)');
for ii=1:size(x,2)fprintf(fid,'%6.2f %12.8f\n',A(1,ii),A(2,ii));
end
fclose(fid);
matlab">x=0:0.1:1;
A=[x;exp(x)];
fileID=fopen('data.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
% 写入一行字符串
fprintf(fileID,'%6.2f %12.8f\n',A);
% 写入浮点数矩阵
fclose(fileID);

例2:

matlab">a=rand(10);
fid=fopen('rand1.txt','w');
fprintf(fid,'%f\n',a);
fclose(fid);
matlab">for ii=1:10a=rand(10);filename=strcat('rand',num2str(ii),'.txt');fid=fopen(filename,'w');fprintf(fid,'%f\n',a);fclose(fid);
end
更详细的语法参考help文件
  • 格式化操作符
  • 转换字符
  • 可选操作符
  • 字段宽度

A=fscanf(fileID,formatSpec);

  • 将打开的文本文件中的数据读取到列向量A中。并根据formatSpec指定的格式进行转换。
  • fsacnf函数在整个文件中重新应用该格式,并将文件指针定位在该文件结尾标记处
  • 如果无法将formatSpec与文件中的数据匹配,将会只读取匹配的部分并停止处理
  • 该文本文件由文件标识符fileID指定,必须先使用fopen()函数打开文件,指定字符编码,以及获取fid值。读取文件后,必须使用fclose()函数关闭文件。

A=fscanf(fileID,formatSpec,sizeA);

  • 将打开的文本文件中的数据读取到维度为sizeA的数组A中。并将文件指针定位到最后读取的值之后。sancf按列顺序填充A

例子:

matlab">fid=fopen('data.txt','r');
formatSpec='%d %f';
A=fscanf(fid,formatSpec);sizeA=[2 Inf];
A=fscanf(fid,formatSpec,sizeA);
A=A.';
fclose(fid);
其他文本读写函数
  • C=textscan(filename,formatSpec,N):从文本或字符串读取格式化数据
  • tline=fgets(fileID):从文件中读取一行文本数据并保留换行符
  • tline=fgetl(fileID):从文件中读取一行文本数据并删除换行符
文件读取中信息的获取

status = fseek(fileID,offset,origin)

  • fseek函数定位文件位置指针;fileID为文件句柄
  • offset为偏移量,表示位置指针相对移动的字节数,若为正整数,则向后移动;若为负整数,则向前移动
  • origin为起始位置,有三种取值:‘bof’、‘cof’、‘eof’,分别表示文件开头、当前位置、文件结尾
  • 若定位成功,返回0;若定位失败,返回-1

position = ftell(fileID)

  • ftell函数返回文件位置指针的当前位置,单位为字节数
  • 返回值为从文件开始到当前位置的字节数
  • 若文件标识符fileID无效,返回-1

eoftes=feof(fileID)

  • feof函数测试指定文件是否设置了EOF标记,若设置了EOF标记,返回1;否则返回0

frewind(fileID)

  • frewind函数将文件位置指针定位到文件开头

http://www.ppmy.cn/devtools/114423.html

相关文章

linux-系统备份与恢复-系统恢复

Linux 系统备份与恢复:系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分,它指的是在系统崩溃、硬件故障、误操作或安全问题后,恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断,并确保系…

2024 go-zero社交项目实战

背景 一位商业大亨,他非常看好国内的社交产品赛道,想要造一款属于的社交产品,于是他找到了负责软件研发的小明。 小明跟张三一拍即合,小明决定跟张三大干一番。 社交产品MVP版本需求 MVP指:Minimum Viable Product&…

Leetcode 每日一题:Longest Increasing Path in a Matrix

写在前面: 今天我们继续看一道 图论和遍历 相关的题目。这道题目的背景是在一个矩阵当中找寻最长的递增数列长度。思路上非常好想,绝对和 DFS 相关,但是题目的优化要求非常高,对于语言和内存特性的考察特别丰富,如果是…

【裸机装机系列】10.kali(ubuntu)-安装nvidia独立显卡步骤

裸机安装linux,其中一个原因可能就是要用nvidia显卡,之前已经安装好了内核头linux kernel,就可以继续安装nvidia显卡驱动了。 nvidia安装独显可以执行此操作,如果是集显可以跳过这一步无需进行操作。 1> 下载NVIDA官方驱动&…

Redis——C++库redisplusplus在Linux环境下的安装

目录 第一步,安装hiredis第二步,下载redis源码第三步,编译/安装 redis-plus-plus使用redis-plus-plus(以Centos为例)Ubuntu的Makefile 第一步,安装hiredis redis-plus-plus 是基于 hiredis 实现的,而hiredis 是⼀个 C…

YAML配置文件的格式

YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合…

MySQL---创建数据库(基于SQLyog)

目录 0.前言 1.基本认识 1.1编码集 1.2检验规则 2.库的创建和销毁 2.1指令介绍 2.2你可能会出现的问题 3.查看数据库属性 4.创建指定数据库 5.创建表操作 0.前言 之前写过一篇这个关于表的创建和销毁的操作,但是当时是第一次学习,肯定有些地方…

kitti数据深度图转点云坐标计算方法与教程(代码实现)

文章目录 前言一、kitti深度图官网介绍1、官网深度图介绍2、深度图读取官网代码(python)3、深度图解读1、数据格式内容2、深度图加工3、深度图转相机坐标深度二、kitti数据内参P矩阵解读1、P2矩阵举例2、内参矩阵 (3x3)3、特殊平移向量(第4列)4、kitti的bx与by解释三、kitti深…