WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Vergleich von eingegebenen Werten und geladenen Daten in Gui

 

Newbenoob
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 14:27     Titel: Vergleich von eingegebenen Werten und geladenen Daten in Gui
  Antworten mit Zitat      
Hallo Leute,

bräuchte mal bitte etwas Hilfe. Es öffnet sich in dem Programm und verlangt eine Eingabe. Diese soll dann mit meinen Daten verglichen werden.
Code:


function [R] = GUI_36()
% Example:
%          T = GUI_36;  % T will be a string.

R = [];  % In case the user closes the GUI.
S.fh = figure('units','pixels',...
              'position',[500 500 200 100],...
              'menubar','none',...
              'name','GUI_36',...              
              'numbertitle','off',...
              'resize','off');
S.ed = uicontrol('style','edit',...
                 'units','pix',...
                'position',[10 60 180 30],...
                'string','Enter Some Data');
S.pb = uicontrol('style','pushbutton',...
                 'units','pix',...
                'position',[10 20 180 30],...
                'string','Push to Return Data',...
                'callback',{@pb_call});
uicontrol(S.ed)  % Make the editbox active.
uiwait(S.fh)  % Prevent all other processes from starting until closed.
load ('kombinationen_MAARSY.mat','Kombi')
    function [] = pb_call(varargin)
    % Callback for the pushbutton.
        R = get(S.ed,'string');
        isequal (R,kombinationen_MAARSY.mat(Kombi))
        close(S.fh);  % Closes the GUI, allows the new R to be returned.
    end
end

 


Hier der Fehler.


Code:

The class "kombinationen_MAARSY" is undefined.
Perhaps Java is not running.

Error in GUI_36/pb_call (line 36)
        isequal (R,kombinationen_MAARSY.mat)
 
Error while evaluating uicontrol Callback
 



Ich weiß leider nicht, warum der den Code so eigenartig schreibt! Im Editor wird er ordentlich dargestellt.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.09.2013, 20:51     Titel: Re: Vergleich von eingegebenen Werten und geladenen Daten in
  Antworten mit Zitat      
Hallo Newbenoob,

Der Code wurde hier als Text dargestellt, da die Checkbox "BBCode in diesem Beitrag deaktivieren" unter dem Feld zur Eingabe aktiviert war. Ich habe die Checkbox wieder zurückgesetzt.

Was steht denn in dem MAT-File drin?
Code:
load ('kombinationen_MAARSY.mat', 'Kombi')

Dies lädt die Variable "Kombi" aus dem MAT-File. "kombinationen_MAARSY" ist dagegen danach nicht vorhanden. "kombinationen_MAARSY.mat" scheitert dann und da "kombinationen_MAARSY" kein Struct ist (da es ja gar nicht existiert), vermutet Matlab, es könne sich vielleicht um eine Java-Methode handeln.

Das Laden von Variablen direkt in den Workspace ist unübersichtlich und erhöht die Laufzeit im Vergleich zu:
Code:
Data = load ('kombinationen_MAARSY.mat');

Und danach kann man auf die Felder des Structs Data zugereifen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Newbenoob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2013, 08:03     Titel:
  Antworten mit Zitat      
Hallo Jan,

ok das mit dem Code wusste ich nicht.

Die datei kombinatinen_MAARSY enthällt folgende Werte:

Code:

>> load kombinationen_MAARSY.mat
>> whos
  Name           Size                Bytes  Class     Attributes

  BasisPath      1x34                   68  char                
  Kombi          1x276             5120580  struct              
  M              1x1                     2  char                
  R              1x1              11793876  struct              
  Radar          1x6                    12  char                
  T              1x276             5001168  struct              
  Y              1x4                     8  char                
  ans            1x15                   30  char
 


davon brauche ich aber nur Kombi.
Dies sieht so aus:

Code:

1x276 struct array with fields:
    Sequ
    Expe
    Site
    Gain
    Puls
    Beam

 



Dieses Kombi soll dann mit den eingegeben Werten aus dem Edit Fenster verglichen werden. Übereinstimmende Werde sollen danach ausgeben werden.

Ein Beispiel:

Der Benutzer gibt ein "RadarFreq: 53500000". Nun soll diese EIngabe mit den geladenen Daten von kombinationen.MAARSY verglichen werden.
Die Information über die RadarFreq findet man im Expe Teil.

Es müsste ja dann folgende Syntax sein, oder?
Code:

isequal(Kombi.Expe,T)
 


Natürlich sollte an Ende auch noch rauskommen, welche Datei diesen Wert besitzt.


MFG
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.09.2013, 10:24     Titel:
  Antworten mit Zitat      
Hallo Newbenoob,

Hast Du zu diesen Erklärungen eine Frage?

Ist es klar geworden, dass es Vorteile bringt, die Ausgabe von LOAD explizit zu speichern, anstatt die Variablen magisch in den Workspace schreiben zu lassen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Newbenoob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2013, 10:41     Titel:
  Antworten mit Zitat      
Hallo Jan,

nein soweit klar ist mir das noch nicht. Welchen Unterschied macht es, ob ich es mit
Code:
load ('kombinationen_MAARSY.mat');


oder mit
Code:
Data = load('kombinationen_MAARSY.mat');




mache.

Mfg

NbN
Private Nachricht senden Benutzer-Profile anzeigen
 
Newbenoob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2013, 12:35     Titel:
  Antworten mit Zitat      
So, nach einigem Probieren sieht es bisher so aus:

Code:

function [] = GUI_4()
S.fh = figure('units','pixels',...
              'position',[800 800 500 400],...
              'menubar','none',...
              'name','Verify Password.',...
              'resize','off',...
              'numbertitle','off',...
              'name','GUI_4');
S.ed = uicontrol('style','edit',...
                 'units','pix',...
                 'position',[10 280 190 120],...
                 'min',0,'max',2,...  % This is the key to multiline edits.
                 'string',{'Exp'; },...                
                 'fontweight','bold',...
                 'horizontalalign','center',...
                 'fontsize',11);
S.ls = uicontrol('style','list',...
                 'units','pix',...
                 'position',[210 280 180 120],...
                 'backgroundcolor','w',...
                 'HorizontalAlign','left');
T.list = uicontrol ('style','list',...
                 'units','pix',...
                 'position',[10 10 190 190],...
                 'min',0,'max',2,...  % Hier soll dann verglichen werden.
                 'string',{[]},...                
                 'fontweight','bold',...
                 'horizontalalign','center',...
                 'fontsize',11);
S.pb = uicontrol('style','push',...
                 'units','pix',...
                 'position',[10 230 380 40],...
                 'HorizontalAlign','left',...
                 'string','Transfer',...
                 'fontsize',14,'fontweight','bold',...
                 'callback',{@pb_call,S});
T.pb2 = uicontrol( 'style','push',...
                 'units','pix',...
                 'position',[10 200 380 40],...
                 'HorizontalAlign','left',...
                 'string','Vergleichen',...
                 'fontsize',14,'fontweight','bold',...
                 'callback',{@pb2_call,T});

Data = load ('kombinationen_MAARSY.mat');
uicontrol(S.ed)   % Give the editbox control.
%set(handles.list, 'String', get(handles.S.txt, 'String'));
uicontrol(T.list)

function [] = pb_call(varargin)
% Callback for edit.
S = varargin{3};
% Get the string from the edit box.  Note that since the editbox is a
% multiline editbox (max-min>2), the string returned is a cell array.
E = get(S.ed,'string');
set(S.ls,'string',E)  % Now set the listbox string to the value in E.

function [] = pb2_call(varargin,Data)

T = varargin {3};
X = get(S.ls,'string');
set(T.list,isequal (Data,X));
 

Leider kommt immernoch ein Fehler:

Code:

Error using GUI_4>pb2_call
Too many input arguments.
 
Error while evaluating uicontrol Callback
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 23.09.2013, 13:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Code:
function [] = pb2_call(varargin,Data)

so hebelst du die Logik von VARARGIN aus. In diesem Fall kann VARARGIN nur einen Parameter aufnehmen.

Callback-Funktionen brauchen aber mindestens 2 Parameter per default. Da du aber oben einen Extra übergibst, muss in deiner Funktion 3 Parameter deklariert
richtig wäre:

Code:

function pb2_call(hObject, eventdata, varargin)
 


oder
Code:


oder

Code:

function pb2_call(hObject, eventdata, Data, varargin)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Newbenoob
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2013, 13:41     Titel:
  Antworten mit Zitat      
Hallo denny,

müsste ich dann aber nicht für diesen Fall,

Code:


function pb2_call(hObject, eventdata, Data, varargin)
 
 


die Variablen hObject und eventdata noch bestimmen?

Habe es mit dem unteren ausprobiert. Da kommt folgender Fehler:

Code:

>> GUI_4
Index exceeds matrix dimensions.

Error in GUI_4>pb2_call (line 60)
T = varargin {3};
 
Error while evaluating uicontrol Callback

Index exceeds matrix dimensions.
 

Scheinbat hat er ein Problem mit den Dimensionen. Habe schon veruscht, das
Code:


herrauszukommentieren, aber dann folgender Fehler:
Code:

Undefined variable "S" or class "S.ls".

Error in GUI_4>pb2_call (line 61)
X = get(S.ls,'string');
 
Error while evaluating uicontrol Callback

 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 23.09.2013, 14:54     Titel:
  Antworten mit Zitat      
Hallo

weil du bereits beim Erstellen nicht optimalen Weg gewählt hast. Ich weiß ja nicht genau warum du die Handles der GUI-Objekte in unterschiedlichen Struktur-Variablen ablegst. Das ist nicht falsch, aber wäre es nicht besser alle Handles in eine Struktur abzulegen. Das hätte den Verwaltung vereinfacht

so z.B.:
Code:


function [] = GUI_4()
S.fh = figure('units','pixels',...
              'position',[800 800 500 400],...
              'menubar','none',...
              'name','Verify Password.',...
              'resize','off',...
              'numbertitle','off',...
              'name','GUI_4');
S.ed = uicontrol('style','edit',...
                 'units','pix',...
                 'position',[10 280 190 120],...
                 'min',0,'max',2,...  % This is the key to multiline edits.
                 'string',{'Exp'; },...                
                 'fontweight','bold',...
                 'horizontalalign','center',...
                 'fontsize',11);
S.ls = uicontrol('style','list',...
                 'units','pix',...
                 'position',[210 280 180 120],...
                 'backgroundcolor','w',...
                 'HorizontalAlign','left');
S.list = uicontrol ('style','list',...
                 'units','pix',...
                 'position',[10 10 190 190],...
                 'min',0,'max',2,...  % Hier soll dann verglichen werden.
                 'string',{[]},...                
                 'fontweight','bold',...
                 'horizontalalign','center',...
                 'fontsize',11);
S.pb = uicontrol('style','push',...
                 'units','pix',...
                 'position',[10 230 380 40],...
                 'HorizontalAlign','left',...
                 'string','Transfer',...
                 'fontsize',14,'fontweight','bold',...
                 'callback',{@pb_call,S});
S.pb2 = uicontrol( 'style','push',...
                 'units','pix',...
                 'position',[10 200 380 40],...
                 'HorizontalAlign','left',...
                 'string','Vergleichen',...
                 'fontsize',14,'fontweight','bold');

Data = load ('kombinationen_MAARSY.mat');

% du kannst nicht erwarten dass die Data automatisch in callback
% sichtbar ist. Das muss du dann übergeben
set(S.pb2       'callback',{@pb2_call, S, Data});

% oder du musst die Funktionsaufbau ändern,
% dann wird Die DATA sichtbar in Unterfunktion
% Stichwort "Nested Functions"
% function haupt()
%    Data  = [1 2 3]
%    function sub()
%           A = Data
%    end
% end


% das macht keinen Sinn, der Aufruf bedeutet nur,
% dass der Fokus zu S.ed springt.
% Das ist nur gut,
% wenn du möchtest, dass der Benutzer etwas eintippt.
% uicontrol(S.ed)   % Give the editbox control.


% set(handles.list, 'String', get(handles.S.txt, 'String'));
% uicontrol(S.list)

function pb_call(varargin)
% Callback for edit.
S = varargin{3};
% Get the string from the edit box.  Note that since the editbox is a
% multiline editbox (max-min>2), the string returned is a cell array.
E = get(S.ed,'string');
set(S.ls,'string',E)  % Now set the listbox string to the value in E.

function pb2_call(hObject, eventdata, S, Data)

% S = varargin {3};
X = get(S.ls,'string');
set(S.list,isequal (Data,X));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.09.2013, 21:28     Titel:
  Antworten mit Zitat      
Hallo Newbenoob,

Matlab benutzt eine Methode, die JIT-Acceleration heißt, für Just-In-Time. Dabei wird der Code optimiert, damit er schneller ausgeführt werden kann. Dies geschieht zunächst direkt nach dem Laden des M-Files.

Bei "Data = load(...)" ist bekannt, dass die Variable "Data" existiert und überall, wo darauf zugegriffen wird, kann Matlab direkt eine Art Pointer auf die entsprechenden Daten einfügen. Wenn man aber per "load(...)" ein MAT-File lädt, kann Matlab beim Laden des M-Files noch nicht herausfinden, welche Variablen darin stehen. Diese dynamisch erstellten Variablen werden dann in einer Tabelle gespeichert, die bei jedem Variablen-Zugriff erst zeitraubend durchsucht werden muss.

Das gleiche Problem tritt mit EVAL auf.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.