Как лучше экспортировать данные из appdesigner для последующего использования
Здравствуйте! Создал приложение в appdesigner. В нем вводятся из графического интерфейса данные и сохраняются внутри приложения в структуре, где поля структуры могут представлять собой строковые переменные, числовые массивы и таблицы. Как лучше всего эти данные экспортировать в файл, чтобы потом его повторно исопользовать в приложении и не вводить все заново? Или чтобы создать несколько вариантов входных данных и загружать нужный?
Экспорт в текстовый файл кажется сомнительным, так как потом нужно будет выделять из него все поля структуры обратно, а они могут иметь разные размеры. Муторно это. Функцию, которая бы экспортировала структуру в матлабе не нашел. Mat-файл отлично подходит, но внутри appdesigner он не может использоваться. Да и потом, даже если это вдруг возможно, нужно чтоб приложение работало без привязки к Matlab, standalone так сказать.
Может что посоветуете?
Комментарии
mat-файл считывается в рабочее пространство Matlab, а когда приложение работает без Matlab, то считывать его некуда.
Ну вы же где-то храните переменные в приложении, вот туда и загружайте, это и будет ваше рабочее пространство. Я без демонстрации не могу представить, что тут может пойти не так...
ОК, попробую еще раз, что не получится покажу.
Пока решил вопрос через преобразование в таблицу со строковыми переменными и обратно. Чтение-запись через writetable и readtable. С JSON-форматом дела не имел, надо будет попробовать, спасибо.
Может с мат-файлом я перемудрил чего, попробую еще разок.
При попытке воспользоваться командами save и load выдает ошибки:
Warning: Unable to save App Designer app object. Save not supported for matlab.apps.AppBase objects.Unable to load App Designer app object. Load not supported for matlab.apps.AppBase objects.Вот, например:
properties (Access = private)x1 % Descriptionendproperties (Access = public)x2 % Descriptionend% Callbacks that handle component eventsmethods (Access = private)% Code that executes after component creationfunction startupFcn(app)app.x1 = 1;app.x2 = 2;save test.mat;app.x2 = 3;app.x1 = 4;load test.mat x1 x2;app.EditField.Value = app.x1;app.EditField2.Value = app.x2;endendВ окошке видно, что ничего не загрузилось.
load test.mat x1 x2;можно поменять на
load test.mat app.x1 app.x2;или на
load test.mat;Загрузки все равно нет.
Ух ты!
Только не понял, как потом из app.mydata извлечь нужные данные. Например, те же x1 и x2?
Почему-то не получается.
properties (Access = private)x1; % Descriptionx2 % Descriptiontempdata; % Descriptionend% Callbacks that handle component eventsmethods (Access = private)% Code that executes after component creationfunction startupFcn(app)app.x1 = 1;app.x2 = 2;save test.mat;app.x2 = 3;app.x1 = 4;app.tempdata=load("test.mat", "x1", "x2");app.EditField.Value = app.x1;app.EditField2.Value = app.x2;app.TextArea.Value = string(app.tempdata.x1);endendВыдает
Reference to non-existent field 'x1'.Error in testApp/startupFcn (line 35)app.TextArea.Value = string(app.tempdata.x1);Error in testApp (line 98)runStartupFcn(app, @startupFcn)А если открыть test.mat в Matlab, ничего кроме объекта app внутри нет.
В окошке видно, что переменные не загрузились.
properties (Access = private)x1; % Descriptionx2 % Descriptiontempdata; % Descriptionend% Callbacks that handle component eventsmethods (Access = private)% Code that executes after component creationfunction startupFcn(app)app.x1 = 1;app.x2 = 2;y1 = app.x1;y2 = app.x2;save('myFile.mat','y1','y2');app.x1 = 3; %До загрузкиapp.x2 = 4;y1 = 5;y2 = 6;app.tempdata=load("myFile.mat",'y1','y2');app.x1 = app.tempdata.y1; %После загрузкиapp.x2 = app.tempdata.y2;app.EditField.Value = app.x1;app.EditField2.Value = app.x2;app.TextArea.Value = string(app.tempdata.y1) + " " + string(app.tempdata.y2);endendВот в таком варианте заработало. Только как это понять из справки - неведомо. Ничего про то, что к публичным и частным переменным нельзя обращаться командой
saveя не нашел. Для меня это был логичный вариант.