Matlab - buscar y comparar dato en columna cell array

 
Vista:
sin imagen de perfil

buscar y comparar dato en columna cell array

Publicado por douglas (1 intervención) el 17/07/2014 00:57:02
buenas tardes

tengo una base de datos en excel la cual costa de una serie de codigos contenidos en la primela columna que van desde la fila 1 hasta la 518
la cuestión es q necesito mediante un gui importar esa lista de datos, luego introducir un codigo q puede existir en mi lista previamente importada a matlab, realizar la comparación y si los datos son iguales q me realice una accion.

ya pude importar la lista, la cual me crea una cell array de 18x1 q es el siguiente y creo q contiene dos tipos de datos unos son char ( estan entre comillas) y otros double (estan entre corchetes):
'207011-3'
'207011-4'
'207011-5'
'207011-6'
'207027-1'
'207027-2'
'207031-1'
'207031-2'
'207031-3'
'207031-4'
'207031-5'
'207031-6'
'207031-7'
'207031-8'
[620101]
[620100]
[620109]
[630202]
en fin de cuentas he podido compara unos datos con otros pero en ocasiones me sale un error diciendo q las dimensiones de la matrix deben estar de acuerd, esto sucede cuando introduzco un numero q no corresponde con el tamaño q se quiere buscar(eso creo)
aca esta el codigo:

function pushbutton2_Callback(hObject, evdentdata, handles)
[x,y,z]=xlsread('C:\Users\DOUGLAS PC\Desktop\Aplicacion_Matlab_Pasantia\prueba\LISTADO_DE_ INSTRUMENTOS2.xlsx');
z(:,1)
a=get(handles.buscar,'string')
c(1,1)={(a)}
b(1,1)={str2double(a)}
if z{1,1}==b{1,1}
y=1
elseif z{1,1}==c{1,1}
y=1
else y=0
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

buscar y comparar dato en columna cell array

Publicado por Manuel (9 intervenciones) el 17/07/2014 16:01:04
Si te fijas en tu código al poner de esa manera la función xlsread, matlab te devuelve 3 variables, en la x te guarda los numeros que tiene formato numerico y en la y los que no, y luego en la z te los mezcla todos. aprovechando esto se me ocurre este código, pruébalo a ver que tal:

function pushbutton2_Callback(hObject, evdentdata, handles)
[x,y,z]=xlsread('C:\Users\DOUGLAS PC\Desktop\Aplicacion_Matlab_Pasantia\prueba\LISTADO_DE_ INSTRUMENTOS2.xlsx');

a=get(handles.buscar,'string')

comparapalabra=strcmp(y,a);
comparapalabra=sum(comparapalabra);
if comparapalabra~=0
yy=1;
else
a=str2num(a);
comparanumero=find(x==a);
if ~isempty(comparanumero)
yy=1;
else
yy=0;
end

end

PD: he puesto yy, porque la variable y ya la tenemos declarada arriba.

Espero que te ayude
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

buscar y comparar dato en columna cell array

Publicado por andrei (1 intervención) el 23/10/2017 05:55:16
Hola, tengo un caso similar pero es con sql server, digamos que en mi base de datos tengo la medida de tres lados de un triangulo, angulos y coordenadas en un plano cartesiano, como puedo ingresar datos "nuevos", es decir que no se repita un mismo triangulo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function angulo_Callback(hObject, eventdata, handles)
 
A= [str2num(get(handles.A, 'String'))];
B= [str2num(get(handles.B, 'String'))];
C= [str2num(get(handles.C, 'String'))];
t = str2num(get(handles.angulo, 'String'));
R = [cosd(t) -sind(t);
    sind(t) cosd(t)];
    Ar = [A(1,1);
        A(1,2)];
    Br = [B(1,1)-A(1,1);
        B(1,2)-A(1,2)];
    Cr = [C(1,1)-A(1,1);
        C(1,2)-A(1,2)];
 
    Bb= R * Br;
 
    Cc= R * Cr;
 
      Cc = [Cc(1,1)+A(1,1);
            Cc(2,1)+A(1,2)];
      Bb = [Bb(1,1)+A(1,1);
            Bb(2,1)+A(1,2)];
    Ce = sqrt(((Bb(1,1)-A(1,1))^2)+((Bb(2,1)-A(1,2))^2));
    Be = sqrt(((Cc(1,1)-A(1,1))^2)+((Cc(2,1)-A(1,2))^2));
    Aa = sqrt(((Cc(1,1)-Bb(1,1))^2)+((Cc(2,1)-Bb(2,1))^2));
    alpha = acosd(((Aa^2)-(Be^2)-(Ce^2))/(-2*Be*Ce));
    beta = acosd(((Be^2)-(Aa^2)-(Ce^2))/(-2*Aa*Ce));
    gamma = 180 - alpha - beta;
    Ax = [Bb(1, 1) + Cc(1, 1)] / 2;
    Ay = [Bb(2, 1) + Cc(2, 1)] / 2;
    Bx = [A(1, 1) + Cc(1, 1)] / 2;
    By = [A(1, 2) + Cc(2, 1)] / 2;
    Cx = [A(1, 1) + Bb(1, 1)] / 2;
    Cy = [A(1, 2) + Bb(2, 1)] / 2;
 
    ABx = [A(1,1) Bb(1,1)];
    ABy = [A(1,2) Bb(2,1)];
    ACx = [A(1,1) Cc(1,1)];
    ACy = [A(1,2) Cc(2,1)];
    BCx = [Bb(1,1) Cc(1,1)];
    BCy = [Bb(2,1) Cc(2,1)];
    line(ABx, ABy);
    line(ACx, ACy);
    line(BCx, BCy);
    grid on
    hold on
    r = struct('a', Aa , 'b', Be, 'c', Ce, 'Alpha', alpha, 'Beta', beta, 'Gamma', gamma)
    text(A(1, 1), A(1,2), '\alpha =', 'FontSize', 10)
    text(Bb(1, 1), Bb(2,1), '\beta =', 'FontSize', 10)
    text(Cc(1, 1), Cc(2,1), '\gamma =', 'FontSize', 10)
    text(A(1, 1)+.2, A(1,2), num2str(alpha), 'FontSize', 8)
    text(Bb(1, 1)+.2, Bb(2,1), num2str(beta), 'FontSize', 8)
    text(Cc(1, 1)+.2, Cc(2,1), num2str(gamma), 'FontSize', 8)
    text(Ax, Ay, 'a =', 'FontSize', 8)
    text(Bx, By, 'b =', 'FontSize', 8)
    text(Cx, Cy, 'c =', 'FontSize', 8)
    text(Ax+.2, Ay, num2str(Aa), 'FontSize', 10)
    text(Bx+.2, By, num2str(Be), 'FontSize', 10)
    text(Cx+.2, Cy, num2str(Ce), 'FontSize', 10)
    SQL.DBTriangulo(Aa,Be,Ce,alpha,beta,gamma,t)%Estos son mis registros, todo esta en un gui
    SQL.select()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar