Verfasst am: 10.12.2008, 19:10
Titel: Aufrufen von M-Files
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
Lim
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.12.2008, 22:59
Titel: Re: Aufrufen von M-Files
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
"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
Vielen Dank für die Antwort... Das Grundprinzip habe ich verstanden und das läuft auch...
Trifft genau mein Problem...
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! )
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
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
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?!!?
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
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:
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
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!
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
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!!
Stelle hiermit eine virtuelle Kiste Bier ins Forum!
Einstellungen und Berechtigungen
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
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.