2017-11-07 5 views
1

Ich habe eine Zelle Array von Daten als Zeichenfolgen (Format: 'MM/TT/JJJJ'), wobei die Zeichenfolge Länge von Zelle Eintrag von 8 bis 10, abhängig von dem Datum (zB n = 8 für '1/1/2015 "und n = 10 für" 10/10/2015 "). Ich möchte jeden Zellenfeldeintrag in sein entsprechendes Doppel als Datenmenge umwandeln. Ich habe versucht:Wie kann ich in MATLAB ein Zellenarray von Datumszeichenfolgen mit unregelmäßigen Längen analysieren?

id = find(~cellfun(@isempty, regexp(dateList, '/', 'tokenExtents'))); 

und

id = find(~cellfun(@isempty, strfind(dateList, '/'))); 

aber das ist nicht richtig. Ein Ausschnitt des Zellenfeldes vorgesehen ist:

dateList = {'9/9/2016'; 
      '9/10/2016'; 
      '10/10/2016'; 
      '10/11/2016'}; 
+0

Sie haben möglicherweise einen bestimmten Grund für die Verwendung von 'datenum', aber wenn nicht, sollten Sie sich der moderneren' datetime'-Funktionalität zuwenden. –

Antwort

3

Alles, was Sie verwenden müssen, ist datenum, da sie eine Zelle Array von Strings akzeptieren:

dateList = {'9/9/2016'; '9/10/2016'; '10/10/2016'; '10/11/2016'}; 
id = datenum(dateList); 

Und es hat funktioniert, um zu bestätigen:

>> datestr(id) 

ans = 

09-Sep-2016 
10-Sep-2016 
10-Oct-2016 
11-Oct-2016 
0

1) Extrahieren Sie jede Zelle zu 3 verschiedenen Blöcken mit strsplit: Tag, Monat und Jahr

2) Verwenden Sie pad, um jeden Block gleich lang zu machen (2 für Tag und Monat und 4 für Jahr)

3) Verbinden Sie die Zeichenfolge zusammen mit [D, '/', M, '/', Y] und Sie können datenum ohne Probleme ausführen.

Edit 1: Ich denke, die andere Antwort ist viel einfacher, ich wusste nicht, datenum kann Saiten mit etwas anderen foramt nehmen.

+1

Danke. Die erste Antwort funktioniert gut; Ich machte es mir zu schwer, aber ich wusste nicht, dass datenum eine Reihe von Strings akzeptieren konnte. –

Verwandte Themen