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

GUI_Mat_Files_Nach_Bestimmten_Namen_Inhalt_Suchen

 

denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.09.2012, 09:25     Titel:
  Antworten mit Zitat      
Hallo
habe dein Code angepasst, wie ich das meine,


in der OpeningFcn kann nach Checkboxen suchen, und da du diese auf UIPANELs aufteilst, kann man auch die Kategorien bestimmen.

Code:
handles.keypos               = findobj(hObject,'Style','checkbox');
handles.keys                 = cell(1,length(handles.keypos));
% da du checkboxen auf UIPANELs aufgeteilt hast,
% kann man die Kategorien über Zugehörigkeit rausfinden
parent                       = get(handles.keypos,'Parent');
parent                       = [parent{:}];
[dummy,dummy,handles.kat]    = unique(parent);



Da du bereits die Checkboxen, nach Schlüßel benannt hast kann
man den Inhalt aus der Checkbox auslesen, und nur ein Callback für alle Checkboxen nutzen

Code:


function CheckBox_Callback(hObject,eventdata, handles)
keynumber = find(handles.keypos==hObject);
if get(hObject,'Value')
   handles.keys{keynumber } = get(hObject,'String');
else
  handles.keys{keynumber }   =[];
end
 




Wo du später die Schlüssel auswertest könnte ich nicht finden, wahrscheinlich in externen Scripten deshalb muss man irgendwie dass dann noch einbauen.
Ich würde EVALIN und ASSIGNIN abraten zu nutzen, besser, die Daten über Funktionskopf zu übergeben.


Code:
key       =  handles.keys;

keypos    = ~ cellfun('isempty', keys);
key       = key(keypos);

kat1      = handles.kat==1;  
kat2      = handles.kat==2;
kat3      = handles.kat==3;
kat4      = handles.kat==4;

kat1      = kat1(keypos);
kat2      = kat2(keypos);
kat3      = kat3(keypos);
kat4      = kat4(keypos);


FilePath = uigetdir('C:\Dokumente und Einstellungen\AVB2T4N\Desktop\Mess-Files\KW_35_FA_PT6_Probanden_Voruntersuchung_3108_2012','Auswahl Datenordner');
list    = dir(fullfile(FilePath,['*.*']));
list    = {list(~[list.isdir]).name};

pos  = false(length(key),length(list)) ;
for j=1:length(key) ;
  tmppos = regexp(list,key{j}) ;
  pos(j,:) = ~cellfun('isempty',tmppos ) ;
end

% pos = pos(1,Smile& (pos(2,Smile|pos(3,Smile) & (pos(4,Smile);
pos = any(pos(kat1,:),2)&any(pos(kat2,:),2)&any(pos(kat3,:),2)&any(pos(kat4,:),2);


GUI_Skripte.fig
 Beschreibung:

Download
 Dateiname:  GUI_Skripte.fig
 Dateigröße:  10.5 KB
 Heruntergeladen:  309 mal
GUI_Skripte.m
 Beschreibung:

Download
 Dateiname:  GUI_Skripte.m
 Dateigröße:  15.32 KB
 Heruntergeladen:  317 mal
Private Nachricht senden Benutzer-Profile anzeigen


JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 11:28     Titel:
  Antworten mit Zitat      
Erst mal ein riesen großes Dankeschön, für deine Mühe.

Habe zudem was du geschrieben hast noch ein paar Fragen.

Code:

handles.keypos               = findobj(hObject,'Style','checkbox');
handles.keys                 = cell(1,length(handles.keypos));
% da du checkboxen auf UIPANELs aufgeteilt hast,
% kann man die Kategorien über Zugehörigkeit rausfinden
parent                       = get(handles.keypos,'Parent');
parent                       = [parent{:}];
[dummy,dummy,handles.kat]    = unique(parent);  
 


für was stehen die 2 dummys ? muss ich hier meine Panel namen eingeben ?

Code:

key       =  handles.keys;

keypos    = ~ cellfun('isempty', keys);
key       = key(keypos);

kat1      = handles.kat==1;  
kat2      = handles.kat==2;
kat3      = handles.kat==3;
kat4      = handles.kat==4;

kat1      = kat1(keypos);
kat2      = kat2(keypos);
kat3      = kat3(keypos);
kat4      = kat4(keypos);
 


muss das hier noch in die Gui-m-file ? oder muss ich das in mein script oben reinschreiben ? Ich vermute in das Script.

weil das hier gehört schon zu einem Script :

Code:

FilePath = uigetdir('C:\Dokumente und Einstellungen\AVB2T4N\Desktop\Mess-Files\KW_35_FA_PT6_Probanden_Voruntersuchung_3108_2012','Auswahl Datenordner');
list    = dir(fullfile(FilePath,['*.*']));
list    = {list(~[list.isdir]).name};

pos  = false(length(key),length(list)) ;
for j=1:length(key) ;
  tmppos = regexp(list,key{j}) ;
  pos(j,:) = ~cellfun('isempty',tmppos ) ;
end
 
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 12:03     Titel:
  Antworten mit Zitat      
wenn ich das jetzt einfach so laufen lasse und diesen teil in mein script oben reinschreibe :
Code:
key       =  handles.keys;

keypos    = ~ cellfun('isempty', keys);
key       = key(keypos);

kat1      = handles.kat==1;  
kat2      = handles.kat==2;
kat3      = handles.kat==3;
kat4      = handles.kat==4;

kat1      = kat1(keypos);
kat2      = kat2(keypos);
kat3      = kat3(keypos);
kat4      = kat4(keypos);

FilePath = uigetdir('C:\Dokumente und Einstellungen\AVB2T4N\Desktop\Mess-Files\KW_35_FA_PT6_Probanden_Voruntersuchung_3108_2012','Auswahl Datenordner');
list    = dir(fullfile(FilePath,['*.*']));
list    = {list(~[list.isdir]).name};

pos  = false(length(key),length(list)) ;
for j=1:length(key) ;
  tmppos = regexp(list,key{j}) ;
  pos(j,:) = ~cellfun('isempty',tmppos ) ;
end

% pos = pos(1,& (pos(2,|pos(3,) & (pos(4,);
pos = any(pos(kat1,:),2)&any(pos(kat2,:),2)&any(pos(kat3,:),2)&any(pos(kat4,:),2);

 


kriege ich einen Fehler: ??? Undefined function or variable 'keys'.

und beim checken der checkbox PGN : ??? Error using ==> feval
Undefined function or method 'PGN_Callback' for input arguments of type 'struct'.
diesen fehler
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.09.2012, 08:15     Titel:
  Antworten mit Zitat      
Hallo habe leider wenig Zeit, um schnell zu antworten

Fehler war einfach, dass die Variable KEYS nicht defeniert war, S war einfach zuviel

Code:

key       =  handles.keys;
%
% hier war der Fehler
keypos    = ~ cellfun('isempty', key);
key       = key(keypos);

kat1      = handles.kat==1;  
kat2      = handles.kat==2;
kat3      = handles.kat==3;
kat4      = handles.kat==4;

kat1      = kat1(keypos);
kat2      = kat2(keypos);
kat3      = kat3(keypos);
kat4      = kat4(keypos);

FilePath = uigetdir('C:\Dokumente und Einstellungen\AVB2T4N\Desktop\Mess-Files\KW_35_FA_PT6_Probanden_Voruntersuchung_3108_2012','Auswahl Datenordner');
list    = dir(fullfile(FilePath,['*.*']));
list    = {list(~[list.isdir]).name};

pos  = false(length(key),length(list)) ;
for j=1:length(key) ;
  tmppos = regexp(list,key{j}) ;
  pos(j,:) = ~cellfun('isempty',tmppos ) ;
end

% pos = pos(1,& (pos(2,|pos(3,) & (pos(4,);
pos = any(pos(kat1,:),2)&any(pos(kat2,:),2)&any(pos(kat3,:),2)&any(pos(kat4,:),2);
 



Zitat:
für was stehen die 2 dummys ? muss ich hier meine Panel namen eingeben ?


Das sind nur Platzhalter, also die Eingaben brauche ich nicht, seit Matlab 2009b kann ein Delta "~" Zeichen dafür nutzen.

Zitat:

muss das hier noch in die Gui-m-file ? oder muss ich das in mein script oben reinschreiben ? Ich vermute in das Script.


Ja das muss du in dein Script reinschreiben, die nötigen Variablen muss du dann in Workspace transferieren.
Möglich z.B über ASSIGNIN, aber besser ist eine Funktion zu defenieren und dann Eingaben über Funktionskopf übermitteln

Viel Erfolg
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 08:37     Titel:
  Antworten mit Zitat      
Danke für die Antwort.

Die Variablen übergeben als key1....keyn oder als 'Tag' sowie es in den Properties steht?
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 11:51     Titel:
  Antworten mit Zitat      
hab das jetzt so gemacht :

Code:

function CheckBox_Callback(hObject,eventdata, handles)
keynumber = find(handles.keypos==hObject);
if get(hObject,'Value')
   handles.keys{keynumber } = get(hObject,'String');
else
  handles.keys{keynumber }   =[];
end
%%%%%%%%%%%%%%%%%%%%%%%%
vars=whos
for k=1:length(vars)
   assignin('base', vars(k).name, eval(vars(k).name))
end
%%%%%%%%%%%%%%%%%%%%%%%%
 


So kriege ich alles in die "base" workspace.

aber wenn ich mir die handle.keys reinschaue und dabei die checkboxen betätige, kann er auch nur immer eine variable aus einer kategorie setzen.

und mein script läuft zwar ohne fehler durchm, erzeugt mir aber nicht meine "ziel" struktur.

ich vermute das am Anfang meines Scriptes etwas geändert werden muss:
Code:
key       =  handles.keys;

keypos    = ~ cellfun('isempty', key);
key       = key(keypos);

kat1      = handles.kat==1;  
kat2      = handles.kat==2;
kat3      = handles.kat==3;
kat4      = handles.kat==4;

kat1      = kat1(keypos);
kat2      = kat2(keypos);
kat3      = kat3(keypos);
kat4      = kat4(keypos);


FilePath = uigetdir('C:\Dokumente und Einstellungen\AVB2T4N\Desktop\Mess-Files\KW_35_FA_PT6_Probanden_Voruntersuchung_3108_2012','Auswahl Datenordner');
list    = dir(fullfile(FilePath,['*.*']));
list    = {list(~[list.isdir]).name};

pos  = false(length(key),length(list)) ;
for j=1:length(key) ;
  tmppos = regexp(list,key{j}) ;
  pos(j,:) = ~cellfun('isempty',tmppos ) ;
end

pos = any(pos(kat1,:),2)&any(pos(kat2,:),2)&any(pos(kat3,:),2)&any(pos(kat4,:),2);  
%%%%%%%%%%%%%%%%%%%%%%%%%%%hier viielleicht?
names =list(pos) ;
Data = cell(1, numel(names));  

    for i = 1:numel(names)
    Data{i} = load ('-mat', fullfile(FilePath, names{i}));  
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 12:07     Titel:
  Antworten mit Zitat      
Sorry, muss mich verbessern...
er kann generell unter handles.keys nur 1 "key" setzen egal aus welcher kategorie
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 13:37     Titel:
  Antworten mit Zitat      
jetzt hab ich das verändert im script:
Code:


names =list(all(pos,1)) ;
Data = cell(1, numel(names));  

    for i = 1:numel(names)
    Data{i} = load ('-mat', fullfile(FilePath, names{i}));  
    end
 


jetzt kriege ich zwar meine "ziel" struktur aber immer mit nur einem file und immer das selbe egal was ich für ein "key" wähle.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.09.2012, 14:41     Titel:
  Antworten mit Zitat      
Hallo,
GUIDATA benutzen um Änderungen in handles zu speichern

Code:


function CheckBox_Callback(hObject,eventdata, handles)
keynumber = find(handles.keypos==hObject);
if get(hObject,'Value')
   handles.keys{keynumber } = get(hObject,'String');
else
  handles.keys{keynumber }   =[];
end
guidata(handles.fugure1, handles);
 


An der Stelle, wo du aus der GUI dein Script aufrufst,
dein Codeabschnitt einfügen, vor dem Scriptaufruf
Eventuell handles mit GUIDATA updaten.
Code:

% handles = guidata(handles.fugure1);
%%%%%%%%%%%%%%%%%%%%%%%%
vars=whos
for k=1:length(vars)
   assignin('base', vars(k).name, eval(vars(k).name))
end
%%%%%%%%%%%%%%%%%%%%%%%%
 



Zitat:
und beim checken der checkbox PGN : ??? Error using ==> feval
Undefined function or method 'PGN_Callback' for input arguments of type 'struct'.
diesen fehler


CALLBACK in GUIDATA anpassen, also von Nachbarn Checkbox, Callback kopieren
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 14:53     Titel:
  Antworten mit Zitat      
Und ist das auch richtig so ?

Code:
names =list(all(pos,1)) ;
Data = cell(1, numel(names));  

    for i = 1:numel(names)
    Data{i} = load ('-mat', fullfile(FilePath, names{i}));  
    end
 
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.09.2012, 15:07     Titel:
  Antworten mit Zitat      
Ach so

stimmt habe einen Fehler bei Dimensionseingabe gemacht
so wäre das richtiger
Code:


pos = any(pos(kat1,:),1)&any(pos(kat2,:),1)&any(pos(kat3,:),1)&any(pos(kat4,:),1);  
%%%%%%%%%%%%%%%%%%%%%%%%%%%hier viielleicht?
names =list(pos) ;
Data = cell(1, numel(names));  

    for i = 1:numel(names)
    Data{i} = load ('-mat', fullfile(FilePath, names{i}));  
    end
 


Zitat:

Und ist das auch richtig so ?



Code:
names =list(all(pos,1)) ;
Data = cell(1, numel(names));

for i = 1:numel(names)
Data{i} = load ('-mat', fullfile(FilePath, names{i}));
end
 




Richtig wenn du möchtest, dass alle Schlüssel vorkommen
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 15:08     Titel:
  Antworten mit Zitat      
Ok jetzt funktioniert es das, dass was ich auswähle auch alles da bleibt.
Aber wenn ich jetzt aus einer Kategorie mehrere auswähle kommt diese Fehlermeldung : ??? Error using ==> and
Matrix dimensions must agree.

an dieser stelle:
pos =
any(pos(kat1,Smile,2)&any(pos(kat2,Smile,2)&any(pos(kat3,Smile,2)&any(pos(kat4,Smile,2);


und das Problem mit der Zielstruktur ist immer noch da. sie wird erzeugt aber mit nur einer file die auch nicht dem entpricht was ich gesucht habe.
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 15:10     Titel:
  Antworten mit Zitat      
Sorry hab deinen post nicht gesehen werde es jetzt ausprobieren.

Danke
 
JaSoIstEs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2012, 15:13     Titel:
  Antworten mit Zitat      
Wie meinst du das,dass alle vorkommen in einem File-Name? (weil das will ich nicht...

wie gesagt will das ich a und b (beide aus der selben kategorie) checke und dann will ich auch alle files mit a haben und alle files mit b haben...

denny hat Folgendes geschrieben:
Ach so

stimmt habe einen Fehler bei Dimensionseingabe gemacht
so wäre das richtiger
Code:


pos = any(pos(kat1,:),1)&any(pos(kat2,:),1)&any(pos(kat3,:),1)&any(pos(kat4,:),1);  
%%%%%%%%%%%%%%%%%%%%%%%%%%%hier viielleicht?
names =list(pos) ;
Data = cell(1, numel(names));  

    for i = 1:numel(names)
    Data{i} = load ('-mat', fullfile(FilePath, names{i}));  
    end
 


Zitat:

Und ist das auch richtig so ?



Code:
names =list(all(pos,1)) ;
Data = cell(1, numel(names));

for i = 1:numel(names)
Data{i} = load ('-mat', fullfile(FilePath, names{i}));
end
 




Richtig wenn du möchtest, dass alle Schlüssel vorkommen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.09.2012, 15:25     Titel:
  Antworten mit Zitat      
JaSoIstEs hat Folgendes geschrieben:
Wie meinst du das,dass alle vorkommen in einem File-Name? (weil das will ich nicht...

wie gesagt will das ich a und b (beide aus der selben kategorie) checke und dann will ich auch alle files mit a haben und alle files mit b haben...



Das bezog sich an deine Zeile
Code:
names =list(all(pos,1)) ;

all(pos,1) bedeutet dass alle Schlüssel vorkommen müssten
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6  Weiter

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 - 2025 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.