0
votes

I am writing a MATLAB GUI program where the data put in a textbox is stored in a .dat file. When the program is reloaded, the textboxes fetch the data from the file (so that the user doesn't have to re-input his info every time). This part of the code saves the data to a .dat file:

fid = fopen('textboxdata.dat', 'wt');
fprintf(fid, '%s\n', host);
fprintf(fid, '%s\n', username);
fprintf(fid, '%s\n', password);
fclose(fid);

[host, username, and password are strings]

This part of the code fetches the data and puts in into the text boxes:

s = dir('textboxdata.dat');

if s.bytes ~= 0
    fid = fopen('textboxdata.dat', 'rt');
    A = textscan(fid, '%s', 3);
    A = A{1};

    set(handles.hostbox, 'String', A(1))
    set(handles.usernamebox, 'String', A(2))
    set(handles.passwordbox, 'String', A(3))

    fclose(fid); 
end

Now this works fine, but when the user tries to use this data to log onto an FTP server, I get this error:

??? Error using ==> fprintf Function is not defined for 'cell' inputs.

Error in ==> realgui>logonbutton_Callback at 198 fprintf(fid, '%s\n', host);

Error in ==> gui_mainfcn at 96 feval(varargin{:});

Error in ==> realgui at 42 gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)realgui('logonbutton_Callback',hObject,eventdata,guidata(hObject))

But weirdly enough, if you retype all the data, you can log onto the FTP server just fine! I am thoroughly lost here. Does anyone have a clue what is happening?

1

1 Answers

0
votes

A = A{1} produces a cell array of cells that contain strings.

So when you call set(handles.hostbox, 'String', A(1)), the value of A(1) is actually a cell, not a string as you would like it to be.

Since A(1) is a cell containing a string, you want to reference the string contained in the cell using A{1}.

Curly braces for the contents of a cell, parentheses for both the cell and its contents.