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

Teile von Dateinamen in Matrix speichern

 

stimpy
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 14:54     Titel: Teile von Dateinamen in Matrix speichern
  Antworten mit Zitat      
Hallo!
Ich arbeite an einem Programm, welches eine große Zahl von avi-Videos auswerten soll. Die Dateinamen der Videos enthalten Betriebsparameter von Experimenten, so zum Beispiel: Ugs100ml_sUl20ml_s.avi.

Mein Problem ist folgendes: Ich möchte alle Videos eines Ordners nacheinander auswerten. Das habe ich auch schon geschafft, in dem ich die Videos alle von Hand umbenenne (Video1.avi, Video2.avi, usw) und folgenden Quelltext benutze:

for nu = 1:100; %Nummer der Videos
file_ = (strcat(num2str(nu),'Video.avi'));
mov = aviread(file_);
............
end

Ich muss mir dann allerdings die Mühe machen, die Betriebsparameter, die im Dateinamen der Videos enthalten sind von Hand in eine Matrix einzutragen. Diese Mühe möchte ich mir sparen. Es sollen also alle Videos eingeladen werden. Das kann ich schon:

d=uigetdir('','Bitte wählen Sie den Ordner aus, in dem sich Ihre Videodateien befinden.');
pr=dir('*.avi');
names={pr.name};
[a b]=size(names);

Die Einträge aus dem cellarray "names" sollen in eine Matrix gebracht werden, Jedoch nur die Betriebsparameter (Zahlen).

Aus den Dateien

Ugs100ml_sUl20ml_s.avi
Ugs80ml_sUl30ml_s.avi
Ugs50ml_sUl40ml_s.avi
soll eine Matrix gemacht werden, die so aussieht:

M=[100 20; 80 30; 50 40]

Vielen Dank für eure Hilfe im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2009, 15:59     Titel:
  Antworten mit Zitat      
Hallo,

das funktioniert allerdings nur, wenn die Dateinamen ähnlich strukturiert sind. Ansonsten müsste man wohl mit regulären Ausdrücken arbeiten.

Code:
names = {'Ugs100ml_sUl20ml_s.avi'; ...
'Ugs80ml_sUl30ml_s.avi'; ...
'Ugs50ml_sUl40ml_s.avi'};
names2 = strrep(names, 'Ugs', '');
names2 = strrep(names2, 'ml_sUl', ' ');
names2 = strrep(names2, 'ml_s.avi', '');
res = cell2mat(cellfun(@(x) cell2mat(textscan(x, '%f %f')), names2, 'UniformOutput', false))


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stimpy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2009, 17:06     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank soweit. Die Struktur der Dateinamen ist einheitlich; das sollte also kein Problem sein.

Allerdings komme ich noch nicht ganz klar. Ich hatte in meinem ersten Post die Dateinamen etwas vereinfacht. Tatsächlich sehen die etwa so aus:

L_0.1mlmin G_0.6mlmin__uL=0.166 cms_uG=0.15 cms.avi

nun möchte ich alle 4 Zahlen in die Matrix packen, und gestehe, dass es mir nicht gelingt deinen Code so zu verändern, dass es auch mit 4 Zahlen klappt.
Ich habe das bisher so gemacht:

Code:
names2 = strrep(names, 'L_', ''); %Ugs wird entfernt
names2 = strrep(names2, 'mlmin G_', ' ');%ml_sU1 wird entfernt
names2 = strrep(names2, 'mlmin__uL=', '');
names2 = strrep(names2, ' cms_uG=', '');
names2 = strrep(names2, ' cms.avi', '');
res = cell2mat(cellfun(@(x) cell2mat(textscan(x, '%f %f %f %f')), names2, 'UniformOutput', false))
end


Matlab antwortet mir aber:

??? Too many inputs.
Error in ==> autein at 14
res = cell2mat(cellfun(@(x) cell2mat(textscan(x, '%f %f %f %f')), names2, 'UniformOutput', false))


Was habe ich falsch gemacht?
Danke im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 14.12.2009, 17:06     Titel:
  Antworten mit Zitat      
Hallo oder auch so:
Code:

avi_files = {                    ...
      'Ugs100ml_sUl20ml_s.avi'   ...
      'Ugs80ml_sUl30ml_s.avi'    ...
      'Ugs50ml_sUl40ml_s.avi'    ...
};

param    = regexp(avi_files,'(\d\.)+(\d)+|(\d)+','match');
param    = vertcat(param{:});
param    = cellfun(@str2num,param)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.12.2009, 12:45     Titel:
  Antworten mit Zitat      
Hab doch noch Fehler in regulären Ausdruck gemacht,
so sollte es funktionieren
Code:

avi_files = {                    ...
      'L_0.1mlmin G_0.6mlmin__uL=166 cms_uG=0.15 cms.avi '   ...
      'L_0.1mlmin G_0.6mlmin__uL=0.166 cms_uG=2.1 cms.avi '    ...
      'L_0.1mlmin G_0.6mlmin__uL=16.6 cms_uG=0 cms.avi '    ...
};

param    = regexp(avi_files,'(\d)+\.(\d)+|(\d)+','match');
param    = vertcat(param{:});
param    = cellfun(@str2num,param)
 
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 - 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.