Verfasst am: 03.06.2013, 10:11
Titel: Datum und Zeit addieren
Hallo zusammen,
sieht vone uch zufällig jemand den Fehler in folgendem Code?
Ich möchte Datum und eben die passende Zeit addieren (ich habe 12 excel-tabellen, die ich einlese, mit viertelstündlichen Daten). Mein Problem tritt im Februar auf, dort habe ich für 29 Tage (und 2784 Datumswerte) plötzlich 2976 Zeitwerte, was zwei Tagen zu viel entspricht. Daher meien Überlegung, ob er die Zeitwerte wieder von Januar entnimmt? Ich sehe bloß irgendwie den Fehler im Code nicht:
Der Fehler tritt für die letzte Zeile (date + time) auf, wo eben die Matrix Dimension nicht mehr übereinstimmt.
timeRaw enthält (wie gewünscht) 2784 Werte, somit auch iTime, nur time enthält dann plötzlich 2976 Werte.
Noch kurz zum timeRaw. ich splitte die Zeit, weil sie folgendermaßen eingetragen ist: 00:00 - 00:15
Verfasst am: 03.06.2013, 14:19
Titel: Re: Datum und Zeit addieren
Hallo Geranie,
Die Variable "time" existioert wahrscheinlich schon vorher. Du erstellst sie ja nicht neu, sondern schreibst nur werte in die existierende Variable. Siehe:
Dein Code läuft super, nur habe ich jetzt das Problem, dass ich am Ende nur den Dezember ausgegeben bekomme und nicht, wie gewünscht, alle Monate hintereinander gereiht.
Hierfür nochmal die ganze Schleife und die Ausgabefkt.
Liegt das an der inneren for-Schleife, mit der ich die Zeit bereinige?
Für andere excel-tabellen, die allerdings die Zeit direkt am Datum hatten (also, innerhalb einer Spalte, somit konnte ich das direkt mit datenum umwandeln ohne zu addieren o.ä.) hat das eigentlich immer direkt funktioniert, dass Matlab mir die Daten aneinander gereiht ausgegeben hat (also dann insgesamt 35136 Werte bei der Ausgabe).
Es ist nicht klar, wo was als Dezember ausgegeben wird.
Vielleicht hilft Dir der Debugger: Setze einen Breakpoint in den Code und lasse Matlab Zeile für Zeile abarbeiten. Dann sieht man eher, was genau wo passiert.
ersteinmal nochmal vielen Dank, dass du mir hilfst.
Ich habe gerade mal versucht, mit dem Debugger herauszufinden wo es hakt, komme aber nicht weiter.
Über die beiden letzten Befehle (dispatch_RZS.time und dispatch_RZS.data) erstellt matlab mir ja die dispatch_RZS.mat-Datei, die dann meine vorher eingelesenen Werte enthält. Leider befinden sich darin jetzt aber nur die Dezember-Werte und nicht, wie gewünscht, aus allen zwölf Monaten (und zwölf Excel-Listen).
Mit dem Debugger sehe ich jetzt nur, dass er innerhalb der Schleife den Januar einliest, weiß aber nicht, warum er, wenn alle zwölf Listen eingelesen sind, dann nur den Dezember über die dispatchFunktion ausgibt.
EDIT:
Es scheint tatsaächlich an der dispatch Funktion zu liegen. Für moRaw(1).time bekomme ich die Januarwerte, für moRaw(iRead).time nur die Dezemberwerte... Für moRaw(.time (was dafür grad mein erster Ansatz war) bekomme ich den Fehler: Illegal right hand side in assignment. Too many elements.
jemand eine Idee, wie ich dort alle Elemente von Januar bis Dezember ausgeben lassen kann?
Soweit ich sehe, haben wir den Code der "dispatch"-Funktion nicht. Deshalb kann man kaum Verbesserungsvorschläge machen.
Der relevante tile des Orginalcodes und eine vollständige Kopie der fehlermeldung helfen im Allgemeinen weiter als beschreibungen von Teilen derselben.
ich stehe gerade auf dem Schlauch :/
Den Code der dispatch-Funktion finde ich nicht...ich habe den Befehl aus einem andern, ähnlichen Code übernommen, der mir zur Verfügung gestellt wurde. Für zwei andere Messwerte hat er auch funktioniert wie gewünscht...
Eine fehlermeldung habe ich ja eigentlich nicht, ich sehe halt nur, dass in meiner .mat Datei nicht alle Werte drin sind.
Gibt es einen anderen Weg, die Werte aus den Excel-Listen aneinandergehängt als .mat Datei ausgeben zu lassen? Ich habe Zeitwerte und dazu Messwerte.
Es scheint tatsaächlich an der dispatch Funktion zu liegen. Für moRaw(1).time bekomme ich die Januarwerte, für moRaw(iRead).time nur die Dezemberwerte
Da wir den Inhalt der "dispatch"-Funktion nicht kennen, können wir keine Ahnung haben, was sie macht und wie man das Ergebnis an Deine Bedürfnisse anpassen kann.
Ich habe bisher weder verstanden an welcher Stelle im Code das Problem auftritt, z.B. in welcher Zeile und in welcher Variablen, noch von welcher Art von Datei Du sprichst.
Zitat:
Über die beiden letzten Befehle (dispatch_RZS.time und dispatch_RZS.data) erstellt matlab mir ja die dispatch_RZS.mat-Datei
Die gezeigten Befehle erzeugen gar keine Datei, sondern einen Struct.
Zitat:
... Für moRaw(:).time (was dafür grad mein erster Ansatz war) bekomme ich den Fehler: Illegal right hand side in assignment. Too many elements.
Um hier einen Verbesserungsvorschlag machen zu können, benötigen wir die komplette Zeile.
Bitte versuche also nochmal das Problem genauer zu erklären.
danke für deine Geduld!
Ich glaube, ich verwende hier oft falsche Begriffe um mich auszudrücken, da ich mich nur mit Hilfe eines Freundes in Matlab versucht habe einzuarbeiten.
dispatch ist bspw. gar keine Funktion sondern erzeugt mir eben , wie du sagtest, einen struct.
So, ich füge hier jetzt noch einmal den Code ein und versuche dann nochmal, mein Problem zu erklären:
Das Einlesen funktioniert wie gewünscht, alle Daten sind da. Mein Problem ist nun nur noch, dass ich in dispatch_RSZ alle Daten hintereinandergeschrieben stehen haben möchte, also vom 1.1.2012 bis zum 31.12.2012 (für die Datums- und die Messwerte).
Ich habe nun in moRaw alle meine Daten, d.h. in moRaw(1,1).time stehen meine Zeitdaten vom 1.1.2012 bis zum 31.1.2012 und in moRaw(1,2) vom 1.2.2012 bis zum 29.2.2012 und so weiter. In moRaw(1,1).data stehen die zugehörigen Messwerte für Januar usw.
Für den obigen Code erhalte ich nun aber nur meine Januarwerte in dispatchRZS. Gebe ich moRaw(2).time und moRaw(2).data ein, eben nur die Februarwerte usw.
Es freut mich, dass es Dir hilft und dass auch du genug Geduld hattest, um die Rückfragen zu beantworten.
Viele Grüße, 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.