matlab文件与子文件操作

来源:互联网 发布:淘宝买家怎么改评价 编辑:程序博客网 时间:2024/05/16 11:00

      matlab是算法仿真比较流行的工具,在做各种算法仿真的时候需要对数据的处理,有时候包括对数据的读取以及存储等常见操作。下面就来简单说说matlab处理文件和子文件的一些相关操作。

      在各种语言里面都有对文件流的操作,matlab也提供了一些文件操作API,这些API给用户带来了很大的便利。虽然matlab里面对于文件进行处理(比如说常见的load、importdata等操作)是一件很简单的事情,但是对于新手或者对这方面不是很熟悉的人来说就会花更多的时间来了解,出于这样的目的就在这里进行简单对文件、文件夹、子文件夹等相关操作进行简要说明。

matlab文件常见的都有哪些操作

1.load

      load一般是导入matlab数据格式的mat文件,也可以是txt、dat文件导入到matlab工作区间进行后续操作。需要注意的是文件格式通常分为二进制格式与ASCII格式两种。二进制文件可以使用load进行读取,而ASCII文件需要保证数据对齐,否则数据会报错。这里简单说一下ASCII文件与二进制文件的区别:ASCII文件也叫做文本文件,在磁盘中存放时每个字符对应一个字节,用于存放ASCII码,例如数字5678存储格式为:ASC码:00110101(5) 00110110(6) 00110111(7) 00111000(8)共用4个字节。二进制文件是按照二进制进行编码文件,数字5678的编码方式是:00010110 00101110 (十进制5678转换成二进制)只占两个字节。当然要是细分的话可以分为字符型和字节型。

2.importdata

      importdata根据文件名将数据导入到Matlab工作区。可以导入文件类型有很多,.txt .wav 等等,使用很普遍,可以用whos来查看导入工作区的数据。

3.fopen与fscanf

       fopen打开一个文件并创建文件标识以供接下来的读写等操作,fopen命令本身不进行读操作。然后可以使用fscanf读取数据,根据需要对数据进行筛选编辑。

文件夹的处理dir指令

      以上列举了几个常见文件指令,对于文件夹的操作首先不得不说的是dir指令,dir函数是获取指定文件夹下所有文件和文件夹,并存放在一个文件结构体数组中。dir函数调用可以有的方式:

dir(‘.’)列出当前目录下所有子文件夹和文件

dir(‘G:\Matlab’)列出指定目录下所有子文件夹和文件

dir(‘*.m’)列出当前目录下符合正则表达式的文件夹和文件

      dir结果的结构体数组中有5个部分组成,分别为:name、bytes、date、isdir、datenum。以下是一个结构体数组图:

这里写图片描述

      通常在name前两个是’.’和’..’,这是因为’.’表示当前目录,’..’上级目录。可以通过isdir这个标志进行对是否含有子文件夹进行判断。通常可以在程序里面进行如下判断:

mainDir='数据路径';subDir=dir(mainDir);%%%判断subDir结构体for i=1:length(subDir)    if(isequal(subDir(i).name,'.')||...       isequal(subDir(i).name,'..')||...       ~subDir(i).isdir)       continue;    end%%%去除前两级与其他不是目录的文件

       把情况想象得稍微复杂点:对多个子文件夹进行遍历,提取子文件夹名称中数字,并用该数字对生成的mat文件进行命名和保存,保存的文件的名称也需要使用该数字,且保存在该子文件夹里面。

分三步实现以上过程:

step1:遍历子文件夹

      使用dir函数可以实现遍历子文件夹,在以上matlab程序段for循环的end之后加上以下语句获取子文件夹的名称:

folderName=subDir(i).name;%%%获取文件夹的名称folderDate=subDir(i).date;folderIsdir=subDir(i).isdir;

step2:获取子文件夹名称中的数字

      文件夹名称是以字符串的形成进行获取的,matlab里面可以使用isstrprop函数进行获取字符串中的数字部分,以下是测试代码:

function digitalFolderName=getDigitalFolderName(str)A=isstrprop(str,'digit');B=str(A);digitalFolderName=str2num(B)

       以上函数返回一个数字,str2num已经将字符串转换数值,这是将由数字组成的字符串转化为数字。

step3:用提取的数字进行文件存储

      matlab通过运算以后需要对结果进行保存,通常涉及到的数据量种类多时这种命名的方法是很实用,这里需要会用save函数。关于save,通常有以下用法:

1)保存指定变量到当前工作目录,如在命令行输入save xxx 回车

2)保存当前所有变量到当前工作目录

3)保存指定变量到指定文件夹,这种方式使用最多,如save(‘D:\jingyan\example.mat’,’A’) 以下是一些简化后的操作步骤:

 dir('path') ... fileName = ['applianceInit' num2str(digitalFolderName) '_' num2str(i) '.txt'];%%%文件名是:applianceInit159_i.txt  x=importdata(fileName);%%%依次导入txt文件  ...  %%%data processing save(['C:\Users\Administrator\Desktop\Mcode\max+min\dataSet_1\appliance',num2str(digitalFolderName),'\appliance_',num2str(digitalFolderName),'_wave\','applianceWave_',num2str(digitalFolderName),'_',num2str(i),'.mat'],'clean');

      除了以上说到几个文件及文件夹操作指令,matlab还有很多用于文件与文件夹操作函数,比如说addpath()、genpath()、csvread与csvwrite函数等,需要在应用中加深体会。

2 0