Variables not saved after function completes. Help needed

9 vues (au cours des 30 derniers jours)
Rick
Rick le 14 Oct 2012
Hi all,
I have this function in checkfile.m
function [] = checkfile(filename, pathname)
if isequal(filename,0)
warndlg('File not selected.', 'Warning!', 'modal');
else
cd(pathname);
load(filename); % load variables
end
end
Inside this file, there are a number of variables. When this function completes, the variables are deleted. I do not want to save the variables as an array.
For example, inside file1.mat, there are 3 variables, a,b & c.
I want these 3 variables, a,b & c to be in the workspace as it is after the function exits.
How can I make the functions such that the variables do not delete itself after the function exits.

Réponse acceptée

Arthur
Arthur le 14 Oct 2012
The cleanest (and probably fastest) method is to let load(filename) store into a variable, and let the function return this variable. So like this
function myData = checkfile(filename, pathname)
if isequal(filename,0)
warndlg('File not selected.', 'Warning!', 'modal');
myData = [];
else
cd(pathname);
myData = load(filename); % load variables
end
end
Note that I also added myData = [] for the case that there was no file selected. Otherwise your function would fail in this case.
myData will be a structure containing all the variables of the file. So in your case it will contain myData.a, myData.b and myData.c.
  1 commentaire
Rick
Rick le 14 Oct 2012
Thanks!! This is exactly what i needed.

Connectez-vous pour commenter.

Plus de réponses (2)

José-Luis
José-Luis le 14 Oct 2012
Have the function return the variables you want to keep, otherwise they are destroyed upon exit.
function [a,b,c] = checkfile(filename,pathname)
%etc
  1 commentaire
Rick
Rick le 14 Oct 2012
I see.
I have the same numbers of variables for each file. But the names are all different.
As such, i want to save the variables as what they were named.

Connectez-vous pour commenter.


Azzi Abdelmalek
Azzi Abdelmalek le 14 Oct 2012
Modifié(e) : Azzi Abdelmalek le 14 Oct 2012
In your function use
data=load(filename)
If filname.mat contains variables x y and z, you can get them, after caling your function
data= checkfile(filename,pathname)
by:
x=data.x
y=data.y
z=data.z
and don't forget to change, like mentioned by José luis
function data=checkfile(filename,pathname)

Catégories

En savoir plus sur File Operations dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by