How can I delete variables in my MAT-file without loading them into MATLAB 7.2 (R2006a)?
27 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
MathWorks Support Team
am 10 Nov. 2015
Beantwortet: David szpliman
am 19 Sep. 2018
I would like to delete variables in a MAT-file without loading them into MATLAB first.
For example, I have a file called myFile.mat which contains many variables resulting in a large MAT-file which is slow to load. I don't need all of the variables in the file.
Akzeptierte Antwort
MathWorks Support Team
am 10 Nov. 2015
MATLAB itself does not offer any functionality for deleting a particular variable from a MAT file.
However the MAT FILE API provides the matDeleteVariable function which allows you to delete a variable from a MAT file by its name. You can create a small MEX function in order to call matDeleteVariable. An example is attached.
2 Kommentare
Matt J
am 28 Jul. 2017
I tweaked the code to allow multiple variables to be deleted in a single call, in case anyone finds it useful.
#include "mex.h"
#include "mat.h"
/* This function removes one or more variables from a MAT file
* Compile it with
* >>mex rmvarMatfileMEX.c
* Afterwards call it with
* >> rmvarMatfileMEX(FILENAME_WITH_EXTENSION,...variables....)
* e.g.
* >> rmvarMatfileMEX('MyFile.mat','var1','var2',...)
*/
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
MATFile *f;
char *filename;
char *vname;
int tmp;
if (nrhs >= 2 )
{
if (!mxIsChar(prhs[0]) || !mxIsChar(prhs[0]))
{
mexErrMsgIdAndTxt("RemoveVariableFromMatFile:ClassInputArguments","This function expects the inputs to be char.");
}
filename = mxArrayToString(prhs[0]);
f = matOpen(filename,"u");
if (f == NULL)
{
mxFree(filename);
mexErrMsgIdAndTxt("RemoveVariableFromMatFile:UnableToOpenFile","Could not open file. Make sure the file exists and is accessible.");
}
for (int i=1;i<nrhs;i++)
{
vname = mxArrayToString(prhs[i]);
tmp = matDeleteVariable(f,vname);
if ( tmp != 0)
{
mexWarnMsgIdAndTxt("RemoveVariableFromMatFile:UnableToDeleteVariable","Could not delete variable. Make sure that the variable exists.");
}
mxFree(vname);
vname=NULL;
}
matClose(f);
mxFree(filename);
}
}
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Write C Functions Callable from MATLAB (MEX Files) finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!