Как сохранить 1 поле структуры внутри другой сохраненной структуры с ее полями - PullRequest
2 голосов
/ 15 мая 2019

Хотя есть похожие публикации, я не видел этот сценарий для сохранения структуры в структуре.

Вот моя цель: сохранить одно поле структуры внутри уже определенной, сохраненной структуры.

Моя структура фруктов уже сохранена в папке (.mat) и внутри нее:

fruit = 

  struct with fields:

  apples: 5
  oranges: 2
  pineapple: 1

Моя цель - добавить одно поле винограда в уже сохраненную структуру.

fruit = 

      struct with fields:

     apples: 5
     oranges: 2
     pineapple: 1

     grapes: 13

Вот мой код:

clc;
clear all;

fruit.apples = 5
fruit.oranges = 2
fruit.pineapple = 1

save('fruit.mat', '-struct', 'fruit')
clear all;
load('fruit.mat')
fruit.grapes = 13
save('fruit.mat', '-struct', 'fruit')

ВЫХОД: Только поле винограда сохраняется без других полей: яблоки, апельсины и ананас.

РЕЗУЛЬТАТ ЦЕЛИ: Как сохранить все 4 поля в одной структуре фруктов?

1 Ответ

2 голосов
/ 15 мая 2019

Вам необходимо либо пропустить аргумент '-struct' при сохранении в файл mat:

...
save('fruit.mat', 'fruit');
clear all;
load('fruit.mat');
fruit.grapes = 13;
save('fruit.mat', 'fruit');

Или поместите вывод структуры из load в переменную fruit:

...
save('fruit.mat', '-struct', 'fruit');
clear all;
fruit = load('fruit.mat');
fruit.grapes = 13;
save('fruit.mat', '-struct', 'fruit');

Когда вы добавляете аргумент '-struct' перед переменной, содержащей структуру, функция save будет хранить поля этой структуры как отдельные переменные в файле вместо хранение структуры как одной переменной. Итак, во втором варианте выше, файл "fruit.mat" будет содержать три переменные: apples, oranges и pineapple. Вызов load без вывода просто создаст эти три переменные в рабочей области, не содержащиеся в структуре. Вы можете собрать все переменные в файле в структуру путем , указав вывод для load.

...