Hallo, ich nutze seit ein paar Monaten Matlab und dementsprechend dieses Forum. Bisher habe ich immer Antworten auf meine Fragen in älteren Posts gefunden! Dafür schon einmal danke schön.
Zu meinem Problem:
Ich soll Daten einlesen... Dabei handelt es sich um mehrere Dateien, die gleichzeitig aus einem Ordner ausgewählt werden sollen.
Dafür bräucht ich eine Abfrage welches Betriebssystem genutzt wird. Schließlich sortiert Win7 das letzte object nach vorn und Win XP das erste Object nach vorn...
mit ispc, ismac und isunix komm ich nicht weiter, oder?
Ich glaube, dass "normale" MATLAB Befehle wie getenv, ispc, isunix, ismac, mexext nicht diese Frage beantworten.
Es ist die Frage, ob es mit ! oder winqueryreg geht. Dafür weiss nicht nicht genug über Windows.
Ich möchte aber auch anregen die Sortierthematik noch mal zu erläutern. Warum ist die Reihenfolge des OS wichtig? Warum nicht in MATLAB so sortieren wie man will?
wenn es eine Umgebungsvariable gibt, die die benötigte Information enthält, oder die Information in der Registry steht, könntest du es über GETENV oder WINQUERYREG versuchen.
Ich verstehe jedoch nicht, warum die Reihenfolge dieser Anordnung dir in deinem MATLAB-Programm Problleme macht. Man spezifiziert ja normal Dateinamen und sagt nicht "die 1., die 15. und die 37. Datei bitte"?
Grüße,
Harald
weberrob
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.09.2011, 14:16
Titel:
Hallo Andreas,
danke für deine schnelle antwort.
Ich will in matlab darauf reagieren, wie das Betriebssystem mir die daten gibt...
Also es sind die daten
xy1.rpt
xy2.rpt
xy3.rpt
Win7 generiert die ausgabe zu
xy3.rpt
xy1.rpt
xy2.rpt
Win XP generiert die ausgabe zu
xy1.rpt
xy2.rpt
xy3.rpt
sodass ich dann in matlab betriebsabhängig sortieren muss...
Das Entziffern dieses Strings ist also auch nicht gerade konsitent.
Für MacOS habe ich dies gefunden:
Code:
[fail, input] = unix('sw_vers');
if ~fail
OS = strrep(input, 'ProductName:', '');
OS = strrep(OS, sprintf('\t'), '');
OS = strrep(OS, sprintf('\n'), ' ');
OS = strrep(OS, 'ProductVersion:', 'Version: ');
OS = strrep(OS, 'BuildVersion:', 'Build: ');
else
OS = system_dependent('getos');
end
Das Problem ist aber, dass das Betriebssystem die File-Namen gar nicht sortiert liefert, im Gegensatz zu Deiner Annahme. Man kann zwar im Windows-Explorer die Daten nach Größe, Erstellungs- oder Änderungsdatum, alphabetisch oder nach dem Type, aufsteigend oder absteigend sortieren lassen. Das kann aber für jeden Ordner einzeln ausgewählt werden und betrifft wirklich nur den Windows-Explorer. Eine Abfrage per DIR, z.B. in DOS oder in Matlab, ist davongar nicht betroffen.
Zwar gibt DIR die Filenamen in alphabetisch sortierter Reihenfolge aus, das ist aber nicht dokumentiert - weder für Matlab, noch für DOS. Man sollte sich also nicht darauf verlassen. Zudem wird es schwierig, wenn die Dateien Unicode-Zeichen verwenden. Kommt das griechische Alpha vor oder nach dem lateinischen A?
In Windows wird DIR übrigens mit den API-Funktionen FindFirstFile und FindNextFile gelöst - beide definieren ganz bewußt nicht, was genau "First" und "Next" bedeutet. Wenn man z.B. ein Netz-Laufwerk auf einem Samba-Server mounted, hat das Betriebssystem gar keine möglichkeit die Reihenfolge der Files zu beeinflussen.
Wie schon gesagt, ist deshalb DIR und eine ganz speziell an Deine Bedürfnisse angepasste Sortierung anzuraten.
Gruß, Jan
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.