¿Cómo leer varias líneas por individuo en un texto de edición con un valor de Max=5 en Matlab?
-
13-12-2019 - |
Pregunta
Tengo en mi interfaz gráfica de usuario un campo de edición de texto que acepta múltiples líneas con un valor máximo de 5, y no puedo encontrar una manera de mostrar una matriz con los valores de entrada... algo como esto:
m=[m(1) m(2) m(3) m(4) m(5)];
set(handles.show,'string',m)
¿Cómo puedo almacenar los valores en la devolución de llamada de cálculo? Cada vez que ejecuto esto, aparece un error.
function masa_Callback(hObject, eventdata, handles)
% hObject handle to masa (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%h_edit is the handle to the edit box
m=str2double(get(hObject,'String'));
function calculate_Callback(hObject, eventdata, handles)
% hObject handle to agregarm (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
f = str2double(get(h_fuerza,'string')); %h_edit is the handle to the edit box
m = str2double(get(h_masa,'string')); %h_edit is the handle to the edit box
[row, column] = size(m);
for i = 1:row
eval(m{i,:}) %evaluate each line as in MATLAB command prompt
end
Tengo masa_callback, rigidez_callback y fuerza_callback. Intento leer la entrada del usuario en el cuadro de edición de texto... así que quiero pasar esos valores a calcula_callback como una matriz para realizar ciertas operaciones de acuerdo con el valor de n... El error que estoy recibiendo es que cuando por ejemplo n=2, agrego dos valores en la columna masa_callback y fuerza_callback y 3 valores en la rigidez_callback, esos valores se pasan al caso n==2, y cuando mi programa intenta mostrar por ejemplo, la matriz m, muestra todos los valores que ingreso juntos en los espacios de m(1) y m(2)... ¡Quiero poner solo cada valor separado, no unido!... ¿Cómo puedo solucionarlo? Esto, creo que es con una matriz y un bucle, pero no sé cómo ni cómo pasar los valores de la matriz a la ecuación para realizar operaciones (como números) y mostrarlos como una cadena.
Solución
Para solucionar el problema con la entrada (suponiendo que tenga sus datos en alguna matriz de celdas y que handles.show
se refiere a un cuadro de texto), utilice strvcat
:
someCellArray = {'a','b'};
m = strvcat(someCellArray{:});
set(handles.show,'string',m)
Tu problema surge de la línea.
m = str2double(get(h_masa,'string'));
No desea convertir la cadena a doble.
desde el String
La propiedad en realidad devuelve una cadena de varias líneas, debes modificar tu código de esta manera:
m = get(h_masa,'String');
nRows = size(m,1);
for iRow = 1:nRows
eval(m(i,:));
end