uigetfile canceled returns 0, converting my string to a scalar

when I call [infile, location] = uigetfile() and it's canceled, it returns 0s, converting my strings to a scalars
Next time I call it I get an error:
Filename must be a character vector or a string scalar.
How do I get my string back for infile to be properly used next time?
This shouldn't be that hard! I even tried converting the vars back to strings but it still fails after a cancel loop
function LoadfromTextFileButtonPushed(app, event)
% Open the file in the Load trials text
if isempty(app.loc)
[infile, app.loc] = uigetfile('*.txt','Select a Stimulus File',app.defLoc);
else
[infile, app.loc] = uigetfile('*.txt','Select a Stimulus File',app.loc);
end
if infile == 0 % user canceled
app.FileName.Text = 'Click Load From Text File or enter manually';
% give me back a string var for next time
infile = '';
app.loc = app.defLoc; % return to default string
return;
end
% Put full file name into the File field name and read it in
locfile = fullfile(app.loc,infile);
app.FileName.Text = locfile;
app.UITable2.Data = readtable(locfile);
end

 채택된 답변

if isnumeric(infile)
instead of testing == 0

댓글 수: 3

Either works but the problem is getting infile back to a string for the next call.
[infile, app.loc] = uigetfile('*.txt','Select a Stimulus File',app.loc);
the second time around is what fails
The errors pointed out are in the helper files that I can't edit
Filename must be a character vector or a string scalar.
I've even tried this after the cancel:
% give me back a string var for next time
clear infile;
infile = '';
app.loc = app.defLoc; % return to default string
Command line shows infile = '' but still errors out
Don't assign to app.Loc until after you have verified infile
if isempty(app.loc)
[infile, apploc] = uigetfile('*.txt','Select a Stimulus File',app.defLoc);
else
[infile, apploc] = uigetfile('*.txt','Select a Stimulus File',app.loc);
end
if infile == 0 % user canceled
app.FileName.Text = 'Click Load From Text File or enter manually';
% give me back a string var for next time
app.loc = app.defLoc; % return to default string
return;
end
app.loc = apploc;

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 App Building에 대해 자세히 알아보기

제품

릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by