Ci sono diverse funzioni che possono essere usate per risolvere il problema, ad esempio:
ischar: ritorna 1 (valore logico - true) se l'argomento è una stringa di caratteri (o anche un solo carattere), 0 (valore logico - false) in caso contrario (cioè se non è una stringa, ma in questo caso non "dice" quale sia il "tipo" della variabile in input; potrebbe essere un numero, una matrice di numeri, una struttura, un cellarray)
isnumeric: ritorna 1 (valore logico - true) se l'argomento è un vettore, una matrice od un singolo numero , 0 (valore logico - false) in caso contrario (cioè se non è un numero, ma in questo caso non "dice" quale sia il "tipo" della variabile in input; potrebbe essere una stringa, una struttura, un cellarray, un valore logico)
iscell: ritorna 1 (valore logico - true) se l'argomento è un cellarray, 0 (valore logico - false) in caso contrario (cioè se non è un cellarray, ma in questo caso non "dice" quale sia il "tipo" della variabile in input; potrebbe essere un numero, una matrice di numeri, una struttura, uno scalare, un vettore, una matrice)
isstruct: ritorna 1 (valore logico - true) se l'argomento è una struttura, 0 (valore logico - false) in caso contrario (cioè se non è una struttura, ma in questo caso non "dice" quale sia il "tipo" della variabile in input; potrebbe essere un numero, una matrice di numeri, un cellarray, uno scalare, un vettore, una matrice)
La scelta della funzione dipende ... da quello che si vuole fare ...
Qualche esempio:
for i=1:5
switch(i)
case 1
a=33;
case 2
clear a % per rimuovere un warning
a.nome='Aginulfo';
a.eta=99;
case 3
a='questa è una stringa';
case 4
a=magic(4)
case 5
a={[1:4],'anche questa è una stringa'};
end
if(ischar(a))
a
disp('stringa')
elseif(isnumeric(a))
a
disp('numero')
elseif(iscell(a))
a
disp('cellarray')
elseif(isstruct(a))
a
disp('struct')
end
end
Volendo approfondire un po' l'analisi della variabile, si può creare una funzione che analizzi la variabile in input e ne determini il tipo.
function tipo=string_or_not(a)
% tipo=string_or_not(a)
% analizza il "tipo" della variabile in input
% valore ritornato:
% 0: la variabile è una matrice vuota ([])
% 1: la variabile è una stringa
% 2: la variabile è una matrice di stringhe
% 3: la variabile è uno scalare
% 4: la variabile è una matrice
% 5: la variabile è un cellarray
% 6: la variabile è una struttura
if(iscell(a))
tipo=5;
[r,c]=size(a);
for i=1:r
for j=1:c
tmp=a{i,j}
if(ischar(tmp'))
disp(['element(' num2str(i) ',' num2str(j) ') is a string'])
elseif(isstruct(tmp))
disp(['element(' num2str(i) ',' num2str(j) ') is a sruct'])
[rs,cs]=size(tmp);
sf=fieldnames(tmp);
for k=1:length(sf)
if(ischar(tmp(1).(sf{k})))
disp(['Field "' sf{k} '" is a string'])
elseif(iscell(tmp(1).(sf{k})))
disp(['Field "' sf{k} '" is a cellarray'])
else
[tmp_r,tmp_c]=size(tmp(1).(sf{k}));
if((tmp_r+tmp_c) == 2)
disp(['Field "' sf{k} '" is a scalar'])
else
disp(['Field "' sf{k} '" is a (' num2str(tmp_r) ' x ' num2str(tmp_c) ') matrix'])
end
end
end
else
[tmp_r,tmp_c]=size(tmp);
if((tmp_r+tmp_c) == 0)
disp(['element(' num2str(i) ',' num2str(j) ') is a empty matrix'])
elseif((tmp_r+tmp_c) == 2)
disp(['element(' num2str(i) ',' num2str(j) ') is a scalar'])
else
disp(['element(' num2str(i) ',' num2str(j) ') is a (' num2str(tmp_r) ' x ' num2str(tmp_c) ') matrix'])
end
end
end
end
elseif(isstruct(a))
tipo=6;
disp(['the variable is a sruct'])
[rs,cs]=size(a);
sf=fieldnames(a);
for k=1:length(sf)
if(ischar(a(1).(sf{k})))
disp(['Field "' sf{k} '" is a string'])
elseif(iscell(a(1).(sf{k})))
disp(['Field "' sf{k} '" is a cellarray'])
else
[tmp_r,tmp_c]=size(a(1).(sf{k}));
if((tmp_r+tmp_c) == 2)
disp(['Field "' sf{k} '" is a scalar'])
else
disp(['Field "' sf{k} '" is a (' num2str(tmp_r) ' x ' num2str(tmp_c) ') matrix'])
end
end
end
elseif(ischar(a))
[tmp_r,tmp_c]=size(a);
if((tmp_r+tmp_c) == 1)
tipo=1;
disp(['The varaible is a single char'])
else
tipo=2;
disp(['The variable is a (' num2str(tmp_r) ' x ' num2str(tmp_c) ') matrix of strings'])
end
else
[tmp_r,tmp_c]=size(a);
if((tmp_r+tmp_c) == 0)
tipo=0;
disp(['The variable is a empty matrix'])
elseif((tmp_r+tmp_c) == 2)
tipo=3;
disp(['The variable is a scalar'])
else
tipo=4;
disp(['The variable is a (' num2str(tmp_r) ' x ' num2str(tmp_c) ') matrix'])
end
end
... vuoi provare a "scoprire" cosa fa questa funzione ... senza commenti?
Hope this helps.