Matlab, сохраняя погреб - PullRequest
       3

Matlab, сохраняя погреб

1 голос
/ 22 октября 2011

У меня есть скрипт, который не работает полностью:

inputfield = input ('Какое поле вы хотели бы видеть:', 's')

если isfield (пакет, поле ввода)

 fprintf('The value of the %s field is: %c\n',inputfield,...
 eval(['package.' inputfield]))

еще fprintf ('Ошибка:% s не является допустимым полем \ n', поле ввода)

конец

Сначала я определяю структуру в matlab, а затем использую скрипт для структуры:

пакет = структура ( 'Номер элемента', 123 'стоимость', 19,99, 'цена', 39,95, 'код', 'г')

пакет =

item_no: 123
   cost: 19.9900
  price: 39.9500
   code: 'g'

structurevalue Какое поле вы хотели бы видеть: стоимость

поле ввода =

стоимость

Значение поля стоимости: 1.999000e + 001

structurevalue Какое поле вы хотели бы видеть: item_no

поле ввода =

1043 * Номер элемента *

Значение поля item_no: {

почему нельзя прочитать значение item_no?

1 Ответ

1 голос
/ 26 октября 2011

Попробуйте:

fprintf('The value of the %s field is: %s\n',inputfield,...
    num2str(package.(inputfield)))

Были две проблемы с вашей версией.

  1. Вы передавали как числа, так и строки в поле %c в строке fprintf. Когда вводится десятичное число, оно интерпретируется как число и отображается с полной точностью, поэтому 19,99 отображается как 1,999000e + 001. Но когда вводится целое число, оно интерпретируется как символ, поэтому 123 отображается как '{' (символ ASCII 123). Используйте num2str для преобразования чисел в строки для отображения. Также используйте %s для строки любой длины, а не %c для символа.
  2. В общем, не стоит использовать eval, если нет необходимости. В этом случае удобнее использовать inputfield в качестве имени динамического поля из package.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...