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

Aufrufen von M-Files

 

Petz
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.08.08
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 10.12.2008, 19:10     Titel: Aufrufen von M-Files
  Antworten mit Zitat      
Moin zusammen!

Ich habe ein kleines Problem, mit dem ich nicht richtig zurecht komme.
Ich habe insgesamt 42 Ordner, indem jeweils 11 kleine m-files liegen.

Jetzt möchte ich ein einzelnes m-file basteln, dass randomisiert aus den Ordnern Dateien aufruft. Allerdings sollen aus jedem Ordner genau drei Dateien aufgerufen werden...
Am Ende möchte ich also 126 Dateien hintereinander starten, aus jedem Ordner drei willkürliche...

Ich schaffe es leider nicht, dass alle Bedingungen gleichzeitig erfüllt sind!

Würde mich freuen, wenn mir jemand weiterhelfen kann!
Peter
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Lim

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2008, 22:59     Titel: Re: Aufrufen von M-Files
  Antworten mit Zitat      
Petz hat Folgendes geschrieben:
Moin zusammen!

Ich habe ein kleines Problem, mit dem ich nicht richtig zurecht komme.
Ich habe insgesamt 42 Ordner, indem jeweils 11 kleine m-files liegen.

Jetzt möchte ich ein einzelnes m-file basteln, dass randomisiert aus den Ordnern Dateien aufruft. Allerdings sollen aus jedem Ordner genau drei Dateien aufgerufen werden...
Am Ende möchte ich also 126 Dateien hintereinander starten, aus jedem Ordner drei willkürliche...

Ich schaffe es leider nicht, dass alle Bedingungen gleichzeitig erfüllt sind!

Würde mich freuen, wenn mir jemand weiterhelfen kann!
Peter



Ich sach mal: ne ungewöhnliche Aufgabe, klingt eher künstlerisch.

Aber eigentlich brauchst Du dafür i.W. nur dir, cd, randperm und eval
Ich hab mal eine Art Grundgerüst eingehackt, dass Dir hoffentlich weiterhelfen wird:

Code:

d = 11; % Dateizahl
o = 46; % Ordnerzahl
z = 3;  % Zugriffe pro Ordner

% Nur Beispielnamen generieren:
Dateiname = cellstr([repmat('Datei',d,1),num2str((1:d).','%02g'), ...
            repmat('.m',d,1)]);
Ordnername = cellstr([repmat('Ordner',o,1),num2str((1Surprised).','%02g')]);

% Ordnerfolge bestimmen
ordnerFolge = mod(randperm(z*o),o)+1;

% Dateifolge bestimmen
dateiFolge = zeros(o,d);
for n = 1Surprised
    dateiFolge(n,:) = randperm(d);
end
dateiFolge = dateiFolge(:,1:z);
dateiZaehler = ones(o,1);

for k = 1:n*z
    disp(['aus Ordner "' Ordnername{ordnerFolge(k)} '" nimm Datei "' ...
        Dateiname{dateiFolge(dateiZaehler(ordnerFolge(k)))} '"'])
   
    % * hier z.B. mit cd und eval die Datei aufrufen *
   
    % Dateizähler für den Ordner hochsetzen:
    dateiZaehler(ordnerFolge(k)) = dateiZaehler(ordnerFolge(k)) + 1;
end

 
 
Lim

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2008, 23:02     Titel:
  Antworten mit Zitat      
und jetzt mal ohne Smilies :-)

Code:

d = 11; % Dateizahl
o = 46; % Ordnerzahl
z = 3;  % Zugriffe pro Ordner

% Nur Beispielnamen generieren:
Dateiname = cellstr([repmat('Datei',d,1),num2str((1:d).','%02g'), ...
            repmat('.m',d,1)]);
Ordnername = cellstr([repmat('Ordner',o,1),num2str((1:o).','%02g')]);

% Ordnerfolge bestimmen
ordnerFolge = mod(randperm(z*o),o)+1;

% Dateifolge bestimmen
dateiFolge = zeros(o,d);
for n = 1:o
    dateiFolge(n,:) = randperm(d);
end
dateiFolge = dateiFolge(:,1:z);
dateiZaehler = ones(o,1);

for k = 1:n*z
    disp(['aus Ordner "' Ordnername{ordnerFolge(k)} '" nimm Datei "' ...
        Dateiname{dateiFolge(dateiZaehler(ordnerFolge(k)))} '"'])
   
    % * hier z.B. mit cd und eval die Datei aufrufen *
   
    % Dateizähler für den Ordner hochsetzen:
    dateiZaehler(ordnerFolge(k)) = dateiZaehler(ordnerFolge(k)) + 1;
end
 
 
Lim

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2008, 23:12     Titel:
  Antworten mit Zitat      
... Sorry, noch ein Indizierungsfehler :-(

Code:

d = 11; % Dateizahl
o = 46; % Ordnerzahl
z = 3;  % Zugriffe pro Ordner

% Nur Beispielnamen generieren:
Dateiname = cellstr([repmat('Datei',d,1),num2str((1:d).','%02g'), ...
            repmat('.m',d,1)]);
Ordnername = cellstr([repmat('Ordner',o,1),num2str((1:o).','%02g')]);

% Ordnerfolge bestimmen
ordnerFolge = mod(randperm(z*o),o)+1;

% Dateifolge bestimmen
dateiFolge = zeros(o,d);
for n = 1:o
    dateiFolge(n,:) = randperm(d);
end
dateiFolge = dateiFolge(:,1:z);
dateiZaehler = ones(o,1);

for k = 1:n*z
    disp(['aus Ordner "' Ordnername{ordnerFolge(k)} '" nimm Datei "' ...
        Dateiname{dateiFolge(ordnerFolge(k),...
        dateiZaehler(ordnerFolge(k)))} '"'])
   
    % * hier z.B. mit cd und eval die Datei aufrufen *
   
    % Dateizähler für den Ordner hochsetzen:
    dateiZaehler(ordnerFolge(k)) = dateiZaehler(ordnerFolge(k)) + 1;
end
 
 
Lim

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2008, 23:19     Titel:
  Antworten mit Zitat      
"hacken" soll heißen: schnell zusammengepinnt :-/
daher immer noch ohne Gewähr (am besten mit kleinen Zahlen testen und nochmal selbst durchdenken...):

Code:

d = 11; % d = 11; % Dateizahl
o = 3;  % o = 46; % Ordnerzahl
z = 3;  % z = 3;  % Zugriffe pro Ordner

% Nur Beispielnamen generieren:
Dateiname = cellstr([repmat('Datei',d,1),num2str((1:d).','%02g'), ...
            repmat('.m',d,1)]);
Ordnername = cellstr([repmat('Ordner',o,1),num2str((1:o).','%02g')]);

% Ordnerfolge bestimmen
ordnerFolge = mod(randperm(z*o)-1,o)+1;

% Dateifolge bestimmen
dateiFolge = zeros(o,d);
for n = 1:o
    dateiFolge(n,:) = randperm(d);
end
dateiFolge = dateiFolge(:,1:z);
dateiZaehler = ones(o,1);

for k = 1:n*z
    disp(['aus Ordner "' Ordnername{ordnerFolge(k)} '" nimm Datei "' ...
        Dateiname{dateiFolge(ordnerFolge(k),...
        dateiZaehler(ordnerFolge(k)))} '"'])
   
    % * hier z.B. mit cd und eval die Datei aufrufen *
   
    % Dateizähler für den Ordner hochsetzen:
    dateiZaehler(ordnerFolge(k)) = dateiZaehler(ordnerFolge(k)) + 1;
end
 


vielleicht bis gleich...
 
Petz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.08.08
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 12.12.2008, 11:59     Titel:
  Antworten mit Zitat      
Hallo!

Vielen Dank für die Antwort... Das Grundprinzip habe ich verstanden und das läuft auch...
Trifft genau mein Problem... Smile

Allerdings ist mir nicht ganz klar, wie ich jetzt meine vorhandenenen Dateine einbaue!
Meine Ordner haben namen wie zum Beispiel "1BB, 1S6, 6S2..." auch die Dateien sind ähnlich aufgebaut und innerhalb jedes Ordners dann vonn 00 bis 10 durchnummeriert...

Soll ich jetzt alle Ordner am Besten einheitlich benennen und dann jeweils mit fortlaufender Nummer? Ist wahrscheinlich am Einfachsten, oder?!


Auch mit dem Aufrufen der Datei in der for-Schleife habe ich noch Schwierigkeiten, aber daran tüftele ich jetzt erstmal weiter!

Wie ihr merkt, bin ich ein ziemlicher Anfänger und würde mich freuen, wenn ich noch ein paar Tipps bekomme! Surprised)
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2008, 12:26     Titel:
  Antworten mit Zitat      
Ich würde mir
Code:
eine Liste der Verzeichnisse machen, dann der Reihe nach in jedes davon springen, wieder mit dir eine Liste der .m-Files machen, davon x beliebige auswählen und ausführen. Es ist dann egal, wie die Verzeichnisse und Dateien heißen, Du brauchst die Namen nicht vorher zu generieren.
Im Prinzip doch dasselbe wie hier: http://www.gomatlab.de/randomisiert.....len-von-audiodateien.html
 
Petz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.08.08
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 12.12.2008, 14:30     Titel:
  Antworten mit Zitat      
Ja danke... das war ja auch ein ähnliches Problem was ich hatte...
(Es geht auch hier gerade wieder darum unterschiedliche Ausgangskanäle meiner Soundkarte mit unterschiedlichen Signalen zuversorgen!)

Ich schaffe es aber immer noch nicht, das jeweilige m-file auch abspielen zulassen.

Er zeigt es mir immer nur an, aber ich hätte gerne, dass das Skript auch durchläuft. (In den Skripten sind jeweils Rauschen generiert, die dann aus den Lautsprechern abgespielt werden sollen).
Mit dem Befehl
Code:
kann ich ja nur Dateinamen eintippen, ich habe dann aber ja eine Variable wo meine Datei *.m hinterlegt ist.
Wie gesagt die krieg ich nur angezeigt, aber nicht abgespielt!
Weiß jemand abhilfe, wahrscheinlich check ich da irgendwas einfach nicht richtig?!!?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Lim

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2008, 18:20     Titel:
  Antworten mit Zitat      
Petz hat Folgendes geschrieben:

[..]
Mit dem Befehl
Code:
kann ich ja nur Dateinamen eintippen, ich habe dann aber ja eine Variable wo meine Datei *.m hinterlegt ist.
Wie gesagt die krieg ich nur angezeigt, aber nicht abgespielt!
Weiß jemand abhilfe, wahrscheinlich check ich da irgendwas einfach nicht richtig?!!?


Hi,
die Dateinamen in dem Code hatte ich natürlich nur zu Demo-Zwecken generiert. Wenn in jedem Ordner andere Dateinamen stehen, lies sie per
Code:
ein und packe sie am besten in ein cell array of strings der Größe Ordnerzahl mal Datei-pro-Ordner-Zahl (o x d), so dass Du es leicht indizieren kannst.
Das Ausführen sollte dann in der Schleife doch ganz einfach mit eval funktionieren, oder liege ich falsch?
Etwa so:
Code:

o_index = ordnerFolge(k);
d_index = dateiFolge( ordnerFolge(k), dateiZaehler(ordnerFolge(k)) );
cd(Ordnername{o_index})
eval(alleDateinamen{o_index,d_index});
 
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2008, 20:37     Titel:
  Antworten mit Zitat      
Probier mal sowas in der Richtung:
Code:
base=pwd;
liste=dir(base);
mmax=3; % Wie viele Dateien aus jedem Verzeichnis
verz = find([liste.isdir]);
verz(1:2)=[];
for k = verz
    cd(liste(k).name);
    mfiles=dir('*.m');
    n=randperm(numel(mfiles));
    for m=1:mmax
        [pathstr, name, ext, versn] = fileparts(mfiles(n(m)).name);
        run (name)
    end
    cd(base);
end

Aufrufen im Parent der 46 Ordner. Klappt das?
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2008, 10:27     Titel:
  Antworten mit Zitat      
Da hab ich wohl oben einen kaputten Link angegeben:
http://www.gomatlab.de/randomisiert.....n-audiodateien-t3206.html
 
Petz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.08.08
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 15.12.2008, 10:37     Titel:
  Antworten mit Zitat      
Moin moin!

Vielen vielen Dank für eure zahlreichen Antworten.

Mit dem letzten Vorschlag klappt es, dass alles abgespielt wird, allerdings spielt er da die Ornder immer nacheinander ab... Kann ich die Reihenfolge da drin auch noch randomisieren??
Jeder Ordner ist bei mir ein bestimmtes Signal aus einem bestimmten Lautsprecher, die alle im Kreis stehen... daher geht es ohne diese Randomisierung einmal im Uhrzeigersinn rund, es soll aber wild aus allen Richtungen kommen!

Ich werde jetzt mal weiter daran tüfteln, freue mich aber auch weiterhin über Tipps zu meinem letzten Problem! Smile
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Petz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.08.08
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 15.12.2008, 14:48     Titel:
  Antworten mit Zitat      
Also ich habe jetzt folgendes gemacht:

Code:

clc
clear all
 
 
base=pwd;
liste=dir(base);
mmax=3; % Wie viele Dateien aus jedem Verzeichnis
verz = randperm(numel(find([liste.isdir])));
verz(1:2)=[];
diary on
for k = verz
    cd(liste(k).name);
    mfiles=dir('*.m');
    n=randperm(numel(mfiles));
 
    for m=1:mmax
        [pathstr, name, ext, versn] = fileparts(mfiles(n(m)).name);
        run (name)
        disp(['folgende Datei wird abgespielt:  "' name '"'])
        pause(6)
    end
    cd(base);
end
 
 
diary off

 


Jetzt verteilt er die Lautsprecher tatsächlich... allerdings spielt er immernoch die drei M-files pro Lautsprecher hintereinander ab, aber immerhin nicht mehr im Uhrzeigersinn!

Wie krieg ich denn jetzt die letzte Randomiesierungsstufe da rein?? Brauch ich jetzt noch eine for-Schleife?? Hilfe!!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Petz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 27.08.08
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 16.12.2008, 18:34     Titel:
  Antworten mit Zitat      
Alles läuft jetzt so wie ichs mit vorstelle!

Vielen Dank für eure Mithilfe!

Stelle hiermit eine virtuelle Kiste Bier ins Forum! Wink
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.