Ich bekomme ein Messdatenfile als Hexstream und will diesen wieder in eine lesbare Tabelle umwandeln. Die einzelnen Daten sind dabei folgendermaßen aufgelistet:
1.Wert [blocknummer (integer),Datenlänge (integer), Zeitstempel (long integer), Messwert (integer)]
und dann kommt der nächste Wert.
Der Stream sieht dann ungefähr so aus:
[0200 2000 F511DF41 64000000~0083] [0200 2000 F511DF41 64000000~0083]
Derzeit lese ich noch alles in ein Array ein, was aber quatsch ist, da ich ja verschiedene Typen habe. Vielleicht kann mir ja jemand einen Tipp geben, wie ich vorgehen kann. Hänge mal meinen Quelltext an, damit Ihr wisst, wie weit ich bin.
Code:
#include <iostream.h> // cin, cout
#include <fstream.h> // ifstream, ofstream
#include <stdlib.h> // exit, rand
#include <iomanip.h> // setw
#include <conio.h> // getch
void main()
{
ofstream ofl; // Ausgabestrom
char fileread[64]; // Dateiname der einzulesenden Datei
char filewrite[64]; // Dateiname der Auszugebenden Datei
double c; // Eingabezeichen
char rep; // Kontrollvariable
int i; // Zähler Zeile
int y[1000]; // Array zum einlesen der Daten
begin: // Label
cout << "\n\n Geben Sie den Dateinamen der zu bearbeitenden Datei ein: ";
cin.getline(fileread, 64);
ifstream ifl(fileread, ios::in|ios::binary); //öffnen der Datei zur Eingabe im Binärmodus
if (!ifl) // Fehler beim öffnen der Datei
{
cerr << "\nFehler beim oeffnen der Datei! " << fileread;
cout << "\n\nWollen Sie es noch einmal versuchen? (j/n)";
rep = cin.get();
while (cin.get() !='\n'); // Tastaturpuffer leeren für Schleife bei falscher Eingabe
if (rep == 'n')
{
exit (1);
}
else
{
goto begin;
}
}
ifl.read((char*)y, sizeof(y)); // Dateiinhalt in Array y einlesen
ifl.close();
weiter:
cout << "\n\nUnter welchem Namen soll die datei gespeichert werden?: ";
cin.getline(filewrite, 64);
ifstream cfl(filewrite); // Datei für Ausgabe öffnen
if (!cfl)
goto open;
else
{ // Fehler beim öffnen
cout << "\nFehler! Die Datei " << filewrite << " ist bereits vorhanden!";
cout << "\n\nGeben Sie einen anderen Dateinamen ein!";
goto weiter;
}
open:
ofl.open(filewrite);
for (i = 0; i < 10000; i++) // gelesene Werte in Array schreiben
{
ofl.precision(8); // Zahlen auf 8 Stellen begrenzen
ofl << setfill(' ') << setw(18) << dec << y; // gelesene Werte anzeigen
if(!((i+1)%18)) // 18 Werte pro Zeile
ofl << endl;
}
ofl.close();
cout << "\nKonvertierung abgeschschlossen.\nDie Datei " << fileread << "\nwurde unter dem Namen " << filewrite << " abgespeichert.";
cout << "\n\n\Zum Beenden druecken Sie eine beliebige Taste.";
getch();
}