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

Vektorinhalt sortieren (Datum)

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2010, 12:42     Titel: Vektorinhalt sortieren (Datum)
  Antworten mit Zitat      
Hallo an alle!

Erstmal eine kurze Problemerläuterung:
ich habe einen Vektor, der mit Datumsangaben gefüllt ist (im Format dd.mm.yyyy, jeweils als String).
In diesem Vektor befinden sich Datumsangaben über mehrere Monate, unsortiert (also zB 01.02.2010, 12.01.2010, 10.03.2010, usw.).
Wie kann ich nun diesen Vektor aufsteigend nach Datum sortieren? Wenn ich es mit "sort" versuche, wird nur entsprechend nach "dd" sortiert, der Rest interessiert Matlab nicht (also aus obigem Beispiel: 01.02.2010, 10.03.2010, 12.01.2010, usw.).
Was ich aber haben möchte, wäre eine Sortierung nach realem Datum, also 12.01.2010, 01.02.2010, 10.03.2010, usw.
Hat jemand eine Idee oder Funktion, wie bzw. mit der ich dieses Problem lösen kann?

Vielen Dank im Voraus.


Harald
Forum-Meister

Forum-Meister


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

in sortierbares Format umwandeln, sortieren, zurückwandeln.
Wenn x der Vektor ist:

Code:
xd = datenum(x, 'dd.mm.yyyy');
xd = sort(xd);
xd = datestr(xd, 'dd.mm.yyyy');


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2010, 14:04     Titel:
  Antworten mit Zitat      
Erstmal Danke für die schnelle Antwort. Funktioniert soweit wunderbar Smile.

Allerdings habe ich jetzt ein etwas erweitertes Problem. Das Datum steht nämlich innerhalb eines Strings.
Also steht zB statt 01.02.2010 jetzt 01.02.2010_a_b_c.txt.
Gibt es nun auch eine Möglichkeit, solche Strings nach dem darin enthaltenen Datum zu sortieren?
Es stehen, wie beim Eingangsbeispiel, wieder mehrere solcher Dateinamen in einem Vektor.
 
Harald
Forum-Meister

Forum-Meister


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

sofern die Dateinamen immer so aufgebaut sind wie in diesem Fall:

1. Datum extrahieren (die ersten 10 Zeichen)
2. Sortieren wie zuvor, aber Sortierreihenfolge als 2. Argument von sort zurückgeben lassen
3. Diese Sortierreihenfolge auf die originalen Dateinamen anwenden.

Falls du mehr Hilfe brauchst, bitte ein konkretes Beispiel geben, wie deine Dateinamen vorliegen (Cell Array, Char Array, ... ?).

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2010, 14:13     Titel:
  Antworten mit Zitat      
Die Dateinamen liegen in einem, jetzt in dem konkreten Fall, 69x1 cell array vor. 69 ist variabel, cell array ist es aber immer.
Und die Dateinamen sind alle, entsprechend natürlich unterschiedlich, in dem von mir schon genannten Formal dd.mm.yyyy_a_b_c.txt.
 
Harald
Forum-Meister

Forum-Meister


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

das sollte gehen:
Code:
files = {'01.02.2010_a_b_c.txt'; '01.03.2010_d_e_f.txt'; '01.01.2010_d_e_f.txt'};
dates = cellfun(@(x) x(1:10), files, 'UniformOutput', false);
[sorted_dates, seq] = sort(datenum(dates, 'dd.mm.yyyy'));
sorted_files = files(seq)

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2010, 14:40     Titel:
  Antworten mit Zitat      
Leider bringt mir Matlab hier

dates = cellfun(@(x) x(1:10), files, 'UniformOutput', false);

diese Fehlermeldung:

??? Too many inputs.
 
Harald
Forum-Meister

Forum-Meister


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

passiert das bei dem von mir geposteten Code oder wenn du versuchst, das auf deine eigenen Daten anzuwenden?

Falls ersteres: welche MATLAB-Version verwendest du?
Falls letzteres: deine Daten weichen dann anscheinend von den von mir verwendeten Test-Daten ab. Inwiefern? Vielleicht kannst du mir ein paar Zeilen schicken, die tatsächlich Test-Daten im Format deiner Daten generieren.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2010, 15:56     Titel:
  Antworten mit Zitat      
Hallo,

ich habe dein Beispiel erstmal so übernommen, wie du es gepostet hast und da kam der Fehler.
Meine Version von Matlab ist die 7 (R14).
Falls du trotzdem noch ein paar Textzeilen brauchst, ist das auch kein Problem.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2010, 18:30     Titel:
  Antworten mit Zitat      
Ja, das ist eine etwas ältere Version. Schau dir doch mal die Doku zu cellfun in dieser Version an, ob du selbst herausfindest, wo das Problem liegt. Ansonsten musst du das wohl mit einer for-Schleife lösen... oder dir ein neueres MATLAB zulegen Wink

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2010, 11:42     Titel:
  Antworten mit Zitat      
Die Funktion wäre zwar in dem Fall praktisch, aber ich denke, deswegen wird es keine neue Version von Matlab für mich geben Wink.

Zu dem Problem damit an sich: die cellfun aus meiner Version unterstützt noch keine function handles, somit hat sich dein Beispielquelltext wohl oder übel erledigt.
 
Harald
Forum-Meister

Forum-Meister


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

Die Alternative wäre zu versuchen, dasselbe ohne Function Handles zu machen - oder eben in einer for-Schleife. Habe leider keine so alte Version Wink

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2010, 10:43     Titel:
  Antworten mit Zitat      
Danke für die Hilfe, auch wenn ich bis jetzt noch nichts brauchbares herausbekommen habe Wink.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.03.2010, 10:44     Titel:
  Antworten mit Zitat      
Wo hängts denn?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2010, 11:19     Titel:
  Antworten mit Zitat      
Das Datum aus dem String auszulesen ist soweit kein Problem, das bekomm ich hin. Umwandeln in das richtige Format und sortieren somit auch.
Nur fehlt mir im Moment der Ansatz, wie ich nach dem Sortieren den Dateinamen wieder richtig zusammenfüge.
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.