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

Vektor zu erstellten Matrizen hinzufügen und diese verkette

 

Shin
Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 12.11.2009, 18:13     Titel: Vektor zu erstellten Matrizen hinzufügen und diese verkette
  Antworten mit Zitat      
Hey Leute,

Ich habe
- 9 Excel Dateien, jeweils für die Jahre 2000-2008 mit Daten
jede Excel Datei enthält 12 Sheets, für jeden Monat eins
jedes Sheet enthält Daten für 29/30/31 Tage entsprechend dem Monat

Nun ist meine Aufgabe diese Daten in eine große fortlaufende Variable zu verpacken. Angefangen habe ich mit folgender Funktion, mit der ich erstmal Jedes Sheet von jeder Datei einzeln in eine Variable umwandle.


edit:
Zum Verständnis des Codes:
Die Excel Dateien heißen 2000.xls-2008.xls, haben jeweils 12 relevante Sheets enthalten. Daher die Laufvariable i für die 12 Sheets in jeder einzelnen Datei und k für die verschiedenen Excel Dateien.
Beides später auch für die Benennung der Variablen relevant.


Code:

for i = 1:12
    for k = 2000:2008
assignin ('base',['J' num2str(k) '_' num2str(i)], xlsread([num2str(k) '.xls'], i, 'B11:E41'))
    end
end;
 


Wenn ich das ausführe habe ich in meinem Workspace die Variablen J2000_1 bis J2008_12, das sind jeweils 29/30/31 Zeilen á 4 Spalten.

Nun möchte ich zu jeder Matrix einen Zeitvektor hinzufügen, indem in der 5ten Spalte pro Variable die Tage 1-31 bspsw. enthalten sind.

Anschließend sollen all diese Variablen untereinander gehängt werden, zu einer großen <YYYYYYx5> Matrix, die dann alle Daten von Jan 2000 bis Dez 2008 enthält.

Hat irgendjemand einen Vorschlag, wie ich den Zeitvektor zu den im o.g. Code erstellten Matrizen einfügen kann?
Und mit welchem Befehl kann man am einfachsten bestehende Matrizen zu einer anderen hinzufügen, quasi verketten?


Mit freundlichen Grüßen und bestem Dank an die, die sich die Zeit nehmen mein Thread durchzulesen oder vielleicht sogar antworten,
Chris.[/i]
Private Nachricht senden Benutzer-Profile anzeigen


Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 12.11.2009, 19:07     Titel:
  Antworten mit Zitat      
Hallo Shin,

das sollte so funktionieren:
Code:

[alles=[];
for i = 1:12
    for k = 2000:2008
assignin ('base',['J' num2str(k) '_' num2str(i)], xlsread([num2str(k) '.xls'], i, B11:E41'))
eval(['J',num2str(k),'_',num2str(i),'(:,5)=[1:',num2str(length(,'J' num2str(k) '_' num2str(i))),'];'])
alles=eval(['[alles;J',num2str(k),'_',num2str(i)']']);
    end
end;


Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2009, 15:57     Titel:
  Antworten mit Zitat      
Hi,
erstmal vielen Dank für deine Hilfe schonmal, leider klappt das noch nicht 100%ig.

bei der Ausführung von
Zitat:
eval(['J',num2str(k),'_',num2str(i),'(:,5)=[1:',num2str(length('J' num2str(k) '_' num2str(i))),'];'])

kommt die Fehlermeldung:

??? Error: File: XLSreadTEST.m Line: 40 Column: 68
Unexpected MATLAB expression.


Code:

MATLAB gibt ein Fehler vor dem num2str(k) aus und kann nicht ausgeführt werden.
Ich bin gerade ratlos, wie muss ich es umschreiben, dass MATALB es korrekt annimmt? Mit Kommata zwischen den Befehlen, also so:
Code:
[1:',num2str(length('J' , num2str(k) , '_' , num2str(i))),']

funktioniert es ja logischerweise auch nicht, von der Syntax her geht es zwar, aber für den Befehl length sind es zu viele Ausdrücke, damit kann er nichts anfangen.

Viele Grüße und nochmals Dank,
Chris / Shin.
 
Shin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 13.11.2009, 16:20     Titel:
  Antworten mit Zitat      
Ich habe den Knackpunkt gefunden, als ich:
Code:
a = length(['J' num2str(k) '_' num2str(i)]);

ausprobiert habe, gibt er mir
a = 7
aus. Das kann ja schonmal gar nicht sein, i und k habe ich jeweils testweise so geändert, dass er mir nur eine Variable ausgibt, nämlich J200_4. Diese Matrix ist eine <30x4 double>. Die Länge 7 macht keinen Sinn.
Wieso funktioniert bei mir der length Befehl nicht, wenn ich es mit den num2str-Befehlen und den Variablen k und i verwenden will?
Jemand einen Rat?

Grüße,
Chris/Shin.

edit:
Die Probleme häufen sich.
Ich habe gerade gemerkt, dass manche Excel Sheets gar nicht immer Daten für jeden Tag eines Monats enthalten, soll heißen:
Es kann sein, dass im Juli nur für Tag 1-28 Daten vorhanden sind, somit wird auch nur eine 28x4 Matrix erstellt durch meinen Code. Da ich aber zu jedem Monat in der 5ten Spalte die jeweils zugehörigen Serial Date Numbers hinzufügen muss, wird das zu Problem führen, da ich die 28x4 Matrix mit einem 31 zeiligen Vektor verbinden muss. Schwierige Sache für einen MATLAB Anfänger wie mich. Rolling Eyes

Grüße
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.