DateiHeader richtig ausgeben !
-
Hi,
ich habe einen neuen Thread zum Thema DateiHeader angefangen, weil der "alte" Thread ein wenig zu groß geworden ist.
Wie der Titel schon sagt möchte ic die Infos die im DateiHeader stehen ausgeben, teilweise funktioniert das auch (mit Version of data format und Number of ECG waveform data).Aber da mir das Prinzip noch nicht ganz klar ist komme ich nicht so richtig vorwärts.
Ein erstes Problem bekomme ich bei dem Datum und der Zeit der Messungen "Starting date and time of measurement".
Das Datumsformat ist time_t ().
Es muss also die time.h eingebunden werden.
Aber wie muss ich die 4 Asccii Werte behandeln die an dieder Stelle im Array stehen ?
Nur ein simples casten klappt nicht.Beim "Number of ECG waveformdata" ermitteln wurde wie folgt vorgegangen:
int max = arrHeader[12] + (arrHeader[13] << 8); max += (arrHeader[14] << 16) + (arrHeader[15] << 24); cout << "Datasets: " << max << endl;Muss ich nun jeden Eintrag auf diese Weise shiften oder wie muss ich die Infos sonst ausgeben ?
Ich hab ein kleines Programm und sie Schnittstellenbeschreibung raufgeladen:
http://www.filehosting.at/files/download.php?file=994b09dc8fa36789e55f6ef4a5a13da9Wäre klasse wenn Ihr mir da weiterhelfen könntet !
Vielen Dank vorab !
ShadowEater
-
Wo steckt der Sinn einen neuen Thread aufzumachen der so wenige Informationen enthält, dass man ohne Kenntnis des alten Thread überhaupt nicht weiß von was du sprichst?
-
Hi,
@Kritiker
Ich hab doch alles gesagt, ich möchte lediglich den Head der Datei ausgeben die ich raufgeladen habe.
Trotzdem, der "alte" Thread hieß Datenalalysefirma !Gruß
ShadowEater
-
Wo soll dieses Datum denn stehen?
-
Ok, habs gefunden, also doch Tomaten auf den Augen.
-
Vesuch es mal damit, das sollte eigentlich gehen:
int time = arrHeader[8] + (arrHeader[9] << 8); max += (arrHeader[10] << 16) + (arrHeader[11] << 24); cout << "Time: " << time << endl;
-
Hi Kritiker,
danke für Deine Antwort, da krieg ich eine rießige Zahl raus : 1155261101.
Ich nehm an das sind Sekunden !
Wie krieg ich jetzt raus wieviel Jahre, Monate, Wochen, Tahe, Stunden, Minuten und Sekunden das sind.
Nach dem 1. Januar 1970, weil ab da geht's ja los bei der time_t ?Danke für Deine Mühe
ShadowEater
-
Einfach mit
tm TM( gmtime( time ) ) cout << asctime( TM );wobei "time" die Variable von oben ist
-
Hi,
ich hab diesen Code eingepflegt :
int time = arrHeader[8] + (arrHeader[9] << 8); time += (arrHeader[10] << 16) + (arrHeader[11] << 24); cout << "time: " << time << endl; tm TM( gmtime(time)); cout << asctime( TM );Bekomme jetzt leider 2 Fehler :
error C2061: Syntaxfehler : Bezeichner 'gmtime'
'asctime' : Konvertierung des Parameters 1 von 'struct tm *(__cdecl *)(void)' in 'const struct tm *' nicht moeglich
Danke für Deine Hilfe
ShadowEater
-
time_t time; tm TM( *gmtime( &time ) ); cout << asctime( &TM );Aber wie man die time-Funktionen richtig benutzt/aufruft hättest du auch selber nachschlagen können..
-
Hi,
hab ich ja und ich bin auch fast auf das gekommen was Du mir grad gepostet hast, aber time_t time ist doch eine Neudefinition ?wobei "time" die Variable von oben ist
und da ist time als int deklariert !?
Danke für Deine Mühe
ShadowEater
-
Das hab ich nur gemacht damit ich den Code testkompilieren kann, nimm das time von oben, normal sollte sich int implizit in time_t umwandeln lassen (wobei ich da nicht meine Hand drauf halte, dass der Standard das wirklich garantiert), da beide die gleiche Größe bei x86 haben (sollten)
-
Da fällt mir gerade etwas ein, du solltest oben statt int time besser unsigned int time oder gleich time_t time benutzen.
ggf. musst du dann aber casten beim zusammenbauen von time aus den 4Bytes des Arrays, je nachdem ob der Typ von deinem Array signed oder unsigned ist, aber da du hier Rohdaten betrachtest, sollte das Array eh vom typ "unsigned char" sein.
-
Hi Kritiker,
danke, hab den Fehler gefunden.
Aber ich hab da mal ne generelle Frage zu den Shift Geschichten, kannst Du mir erklären warum ich das bei "Starting date ant time of measurement " und bei "Number of ECG waveform data" machen muss ?
Wie liest Du das aus der Schnittstellenbeschr. raus ?
Meine Bücher schweigen zu diedsen Thema !
Wie und warum würdest Du "Information of arrhytmia", Heart rate usw. ausgeben ?
Kannst Du mir ein bisschen näher erklären was dahintersteckt.
Das einzige was ich glaub ich begriffen hab ist dass "Version of data format" einfach so ausgeben kann das es sich um chars handelt und diese vom Ascii representiert werden ?
Wäre super wenn Du mir das erklären könntest ?
Vielen dank für Deine Hilfe und Mühe
ShadowEater
-
Stimmt lässt sich zuweisen
time_t timeOut; timeOut = time; tm TM(*gmtime(&timeOut)); cout << asctime( &TM );

ShadowEaterP.S.:
Hab aber gleich time_t time; verwendet
-
Hi,
bei den ganzen Werten von +10 bis +20, wie sieht das da aus?
Ich beweg mich hier total im dunkeln !
Danke
ShadowEater
-
Hi,
hab ich mich irgendwie mißverständlich ausgedrückt ?
Wenn ja lags nicht in meiner Absicht !Oder weiß es momentan keiner ?
Gruß
ShadowEater
-
Hi zusammen,
ich habe nochmal alles überarbeitet und so gut kommentiert wie es ging.
Teilweise wird der Head jetzt auch richtig ausgelesen.
Wie sieht das aber aus wenn 2 Werte auf jeweils 2Byte verteilt sind.
Die etsten beiden Byte und somit den 1. Wert kann ich auslesen z.B.:
Average heart rate://DURCHSCHNITTLICHE (AVERAGE) Herat Rate short int DSHeartRate = arrHeader[52] + (arrHeader[53]); cout << "DSHeartRate Rate: " << DSHeartRate << endl << endl;Das Ergebnis ist 75, was richtig ist !
Wie sieht es aber mit dem 2. Wert aus (Average instantaneous heart rate ???) ?
Zur verdeutlichung ein 2. Beispiel:
MAXIMUM Heart rate ist der erste 2 Byte Wert (Byte 48 und 49),
MINIMUM Heart rate ist der zweite 2 Byte Wert (Byte 50 und 51), die Berschnung des 1. Wertes müsste stimmen, hoffe ich aber der 2.???//MAXIMUM Herat Rate short int MAXHeartRate = arrHeader[48] + (arrHeader[49]); cout << "MAXHeart Rate: " << MAXHeartRate << endl << endl; //MINIMUM Herat Rate short int MINHeartRate = arrHeader[50] + (arrHeader[51] ); cout << "MINHeartRate Rate: " << MINHeartRate << endl << endl;Kommt das so hin mit der Bitshifterei bzw. mit dem Fehlen derselben ?
Ich hab selbstverständlich die bereinigte Version nochmal hochgeladen :
http://www.filehosting.at/files/download.php?file=1c133eee8c86bc1220307936b7d07f8bVielen, vielen Dank für eure Mühe und Hilfe
Gruß
ShadowEaterP.S.:
Falls Ihr irgendwelche Tuts, Bücher, Skripten, Worshops oder sonstiges Material kennt, die dieses Thema behandeln wäre ich um jeden Link dankbar