Variables not saved after function completes. Help needed

9 ビュー (過去 30 日間)
Rick
Rick 2012 年 10 月 14 日
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.

採用された回答

Arthur
Arthur 2012 年 10 月 14 日
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 件のコメント
Rick
Rick 2012 年 10 月 14 日
Thanks!! This is exactly what i needed.

サインインしてコメントする。

その他の回答 (2 件)

José-Luis
José-Luis 2012 年 10 月 14 日
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 件のコメント
Rick
Rick 2012 年 10 月 14 日
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.

サインインしてコメントする。


Azzi Abdelmalek
Azzi Abdelmalek 2012 年 10 月 14 日
編集済み: Azzi Abdelmalek 2012 年 10 月 14 日
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)

カテゴリ

Help Center および File ExchangeFile Operations についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by