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

Variabler Pfad, der es nicht ist

 

flowster
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 18.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2012, 08:39     Titel: Variabler Pfad, der es nicht ist
  Antworten mit Zitat      
Hallo Leute!

Ich greife über eine GUI auf einen ausgewählten Ordner zu, deren Dateien ich vorher mit
Code:
in ein struct eingelesen habe.

Vorher sind zwei Parameter abhängig von der Auswahl des jeweiligen Ordner (über ein PopUp Menü). Die anderen "cases" mal außen vor, sieht das Ganze so aus:
Code:

if Test == 2
    switch Liste
        case 2
            files = dir('I:\...\*.wav');
        case 3
            files = dir('I:\...\*.wav');
end
elseif Test == 3
    switch Liste
        case 2
            files = dir('I:\...\*.wav');
        case 3
            files = dir('I:\...\*.wav');
end
end
 


Ich spreche dann im nächsten Schritt die verschiedenen Dateien aus dem ausgewählten Ordner mit
Code:
files(1,1).name
an und übergebe diesen String an eine eigene Funktion. Diese Funktion spielt die .wav Dateien im Ordner ab (nacheinander immer nach einem Buttonpress bzw. wenn sich der Zähler erhöht)

So weit so gut, dass läuft auch alles wunderbar. Das einzige Problem, dass mich aufhält ist die Tatsache, dass ich immer nur eine Liste abspielen kann, egal welchen Ordner bzw. welcher case in Kraft tritt. Es beginnt immer mit der gleichen Datei und ihren Nachfolgern. Ich kann im Variableneditor sehen, wie sich die byte Zahlen ändern und damit nachvollziehen, dass sich die Dateien je nach case ändern. Dennoch wird immer wieder auf das eine struct vom einen Ordner zugegriffen.

Ich habe meinen Code durchsucht und nichts gefunden, was darauf schließen könnte, dass ich vorher einen Pfad festgelegt hätte.

------------------------------------------------------------------------------------

Ich hoffe, dass war einigermaßen verständlich. Ich bin unter Kollegen bekannt dafür, gerade Programmiertechnische Probleme äußerst schlecht erklären zu können.
Private Nachricht senden Benutzer-Profile anzeigen


2010ak1989
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 17.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2012, 10:13     Titel:
  Antworten mit Zitat      
Hallo,
Kann es sein, dass du in deinem GUI die ganzen Ordner in den
Code:

abspeicherst, denn dann müsstest du glaub ich bei deinem (jedem) Callback diese Handles-Struktur aktualisieren

Code:
guidata(hObject, handles)


ansonsten, wenn du das global machst, was eigentlich nicht elegant ist, sollte das auch funktionieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
flowster
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 18.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2012, 11:25     Titel:
  Antworten mit Zitat      
Ich setze zu Beginn meine Werte für den Test und die Liste jeweils auf 0, was dann logischerweise nicht funktioniert, da kein case vorgeschrieben ist. Aber selbst wenn der Wert eigenständig auf 7 oder 8 gesetzt wird, tritt dennoch case 3 immer wieder in Kraft.

Ich ziehe mir ja nur den Wert der Liste raus, schreibe je nach case die Files ins struct und rufe dann mit meiner Funktion den Kram Stück für Stück auf. Ich hoffe dich einigermaßen verstanden zu haben, aber mit den handles arbeite ich soweit ich weiß nicht.
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: 18.09.2012, 12:15     Titel:
  Antworten mit Zitat      
Hallo flowster,

Vielleicht solltest Du aber mit handles arbeiten, da Dir mit GUIDATA eine gute Methode zur Verfügung steht um Daten im Figure zu speichern.

Anmerkung:
Code:
Pool = {'I:\folder1\...\*.wav', 'I:\folder2\...\*.wav'; ...
                 'I:\folder3\...\*.wav', 'I:\folder4\...\*.wav'};
files = dir(Pool{Test - 1, Liste - 1});

das wäre kompakter und einfacher zu erweitern, da alle Pfade beieinander stehen, statt quer durch den Code verteilt.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 18.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2012, 12:36     Titel:
  Antworten mit Zitat      
Vielen dank dafür, dass ist wirklich übersichtlicher und kompakter!

Dennoch bleibt der Fehler.

Ich habe auch mit dem Tipp von "2010ak1989" gearbeitet und keine Lösung erzielen können. Was genau meint aber die Aktualisierung der Handlestruktur?
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: 18.09.2012, 13:12     Titel:
  Antworten mit Zitat      
Hallo flowster,
Zitat:
Was genau meint aber die Aktualisierung der Handlestruktur?

Code:
handles.FigH = figure;
handles.CurrentTime = datestr(now, 0);
handles.ButtonH = uicontrol('Style', 'pushbutton', 'String', handles.CurrentTime, ...
   'Callback', {@myCallback, handles});

function myCallback(ObjH, EventData, handles)
disp(handles.CurrentTime);
handles.CurrentTime = datestr(now, 0);
set(ObjH, 'String', handles.CurrentTime);

Hier wird nun im Command-Window immer die gleiche Zeit angezeigt, im Button aber die aktuelle Zeit. Die Änderungen in "handles" werden nämlich nicht wieder in der Figure gespeichert. deshalb ist auch "handles.ButtonH" gar nicht innerhalb von myCallback vorhanden: Als der Callback definiert wurde, war dieses Feld noch gar nicht vorhanden!

Verbesserung:
Code:
function myCallback(ObjH, EventData, handles)
FigH = guidata(handles.FigH);  % Aktuellen handles struct besorgen
disp(handles.CurrentTime);
handles.CurrentTime = datestr(now, 0);
set(ObjH, 'String', handles.CurrentTime);
guidata(handles.FigH, handles);   % Abspeichern

Der Code, den du bisher gepostet hast, enthält keinen Fehler, der das beschriebene Verhalten erzeugt. Folglich liegt es an Code, den wir noch nicht kennen und wir können weder die Ursache erraten noch einen Verbesserungsvorschlag machen. Sehr oft hängen unveränderliche Werte in GUIs aber damit zusammen, dass vergessen wurde, den handles Struct upzudaten.

Gruß, 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.