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

Wert aus dos('x') Antwort auslesen

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2013, 12:12     Titel: Wert aus dos('x') Antwort auslesen
  Antworten mit Zitat      
Hi,

ich rufe ein dos Programm auf z.B.:
Code:
[~,result1] =dos('mp3info.exe -x -F -r a  c:\x.mp3');


und bekomme dann für result1 eine cell:
Code:
   'File: c:\x.mp3'
    'Title:   x   Track: 1'
    'Artist:  x'
    'Album:   x, Year:  2012'
    'Comment: '
    'Media Type:  MPEG 1.0 Layer III'
    'Audio:       192.000000 KB/s, 44KHz (stereo)'
    'Emphasis:    none'
    'CRC:         No'
    'Copyright:   No'
    'Original:    No'
    'Padding:     Yes'
    'Length:      0:57'
    ''

jetzt möchte ich da den Wert der Bitrate (hinter Audio:) und Length auslesen.
Code:
result2 = strfind(result1{1},'Audio')

Gibt mir ein 14 x 1 cell mit 1 für die Zeile mit dem Treffer aus. Aber wie kann ich an den Wert dahinter kommen?

MfG Thomas
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: 16.09.2013, 13:00     Titel: Re: Wert aus dos('x') Antwort auslesen
  Antworten mit Zitat      
Hallo Thomas_74,

Es wundert mich, dass DOS einen Cell String zurückgeben soll. Ich hätte auf alle Fälle einen einfachen String erwartet, der mit CHAR(10) als Zeilen-Umbruch in einzelne Zeilen untergliedert ist.
Wenn Du nun noch per "strfind(result{1}, 'Audio')" darin suchst, sieht es eher nach einem Cell aus, der ein Cell String enthält. Das finde ich so verwirrend, dass ich mich mit einer Antwort ersteinal zurückhalte.

Aber grundsätzlich geht das mit sscanf:
Code:
S = 'Audio:       192.000000 KB/s, 44KHz (stereo)';
Value = sscanf(S, 'Audio: %g KB/s, %dKHz', 2);

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

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2013, 13:11     Titel:
  Antworten mit Zitat      
Hi,

ich hab weiter gegoogelt und es jetzt so gelöst:

Code:
[z,result1] =dos(['mp3info.exe -x -F -r a ' fi]);
result2=str2double(regexprep(result1, '\D+', ' '));
result =result2(:,10);


allerdings funktioniert das nicht mit Leerzeichen in den Ordnernamen.
Kann MATLAB die Leerzeichen in den Ordnernamen entfernen und durch "_" ersetzen?
Oder gibt es da eine bessere Lösung?
Ich hab das jetzt mal von hand gemacht und bekomme bei result2 nur NaN ausgegeben. Ich mach da wohl irgendwas verkehrt??


MfG Thomas
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: 16.09.2013, 14:14     Titel:
  Antworten mit Zitat      
Hallo Thomas_74,

Wenn Du jetzt nochmal geschrieben hättest, welchen Typ "result1" hat, hätte ich Dir weiterhelfen können.

Code:
[z,result1] =dos(['mp3info.exe -x -F -r a ' fi]);
result2=str2double(regexprep(result1, '\D+', ' '));
result =result2(:,10);


Zitat:
allerdings funktioniert das nicht mit Leerzeichen in den Ordnernamen.

Woher können wir nun wissen, was "die Ordnernamen" sind und was "funktioniert nicht" bedeutet? Bitte lasse uns nicht die Details erraten, die Du klar vor Dir liegen hast.

Zitat:
Kann MATLAB die Leerzeichen in den Ordnernamen entfernen und durch "_" ersetzen?

Ja, das kann Matlab. Möchtest Du die Ordner auf der Festplatte umbenennen oder meinst Du nur die Namen im Speicher ändern?

Zitat:
Ich hab das jetzt mal von hand gemacht und bekomme bei result2 nur NaN ausgegeben. Ich mach da wohl irgendwas verkehrt??

Und wieder kann ich nicht erraten, was Du genau gemacht hast und was "von Hand" bedeutet.

Wenn ein Ordner Leerzeichen enthält, kann man ihn in DOS-Befehlen verwenden, indem man sie in Anführungszeichen einschließt.

Bitte denke daran, dass die Leser im Forum nicht die geringste Ahnung haben, was Du machst und vorhast. Je präziser dann die Frage ist, desto eher lässt sie sich effizient beantworten.

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

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2013, 15:22     Titel:
  Antworten mit Zitat      
Hi,

ich versuche hier mp3s in Ordnern und Unterordnern zu lesen (bitrate).
So wie ich es gemacht hatte konnte das DOS Programm die Eingabe nicht verarbeiten, wenn da Leerzeichen in den Ordnernamen waren.

Mit den Anführungszeichen für die Programmeingabe, das ist cool das wusste ich noch nicht. Das funktioniert jetzt.

Ansonsten hätte ich alle Ordner auf der Platte umbenennen müssen.

Sorryy das ich das nicht so gut beshrieben hab, aber mir ist beim Arbeiten mit Matlab und Texten nich so wirklich klar wo es drauf ankommt und wie es geht.

Vielen Dank Thomas

Zuletzt bearbeitet von Thomas_74 am 16.09.2013, 15:30, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2013, 15:27     Titel:
  Antworten mit Zitat      
Hm,

leider ist mein Ergebniss je nachmp3 Datei unterschiedlich lang. So dass der Code nicht funktioniert.
Code:
[z,result1] =dos(['mp3info.exe -x -F -r a "' fi '"']);
result2=str2num(regexprep(result1, '\D+', ' ')); %str2double geht nicht
result =result2(:,10);


result1 ist ein char laut Workspace

Da müsste ich irgendwie die Zahl nach Audio: und vor KB/s,... als Variable finden (das sollte mindestens immer gleich bleiben).

MfG Thomas
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: 17.09.2013, 00:11     Titel:
  Antworten mit Zitat      
Hallo Thomas_74,

Zitat:
result1 ist ein char laut Workspace

Aha! Das bringt uns schon mal viel weiter. Wenn die Ausgabe ein String ist, kannst Du ihn zuerst mal in einen Cell String umwandeln:
Code:
CStr = regexp(result1, '\n', 'split');
index = strncmp(CStr, 'Audio:', 6);
Value = sscanf(CStr{index}, 'Audio: %g KB/s, %dKHz', 2);

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.