dat-File einlesen und untersuchen
-
Hallo,
ich habe eine Frage die bestimmt jemand beantworten kann. Ich möchte ein dat-File öffnen und die dort befindlichen Werte einlesen. Das habe ich bis jetzt noch nie getan. Problem ist das besonder Format. Eine Datei ist wie folgt aufgebaut:
Sensor-ID = 46 Beschreibung = E-total SB 12159 (poly) Faktor = 1 Offset = 0 startwert = 0 endwert = 1.2e+06 Anzahl Datensaetze = 82213 1072940640 01.01.2004 08:04:00 3354.16 1072940760 01.01.2004 08:06:00 3354.16 1072940880 01.01.2004 08:08:00 3354.16 1072941000 01.01.2004 08:10:00 3354.16 1072941120 01.01.2004 08:12:00 3354.16 1072941240 01.01.2004 08:14:00 3354.16 1072941360 01.01.2004 08:16:00 3354.16 1072941480 01.01.2004 08:18:00 3354.16 1072941600 01.01.2004 08:20:00 3354.16 1072941720 01.01.2004 08:22:00 3354.16 1072941840 01.01.2004 08:24:00 3354.16 1072941960 01.01.2004 08:26:00 3354.16 1072942080 01.01.2004 08:28:00 3354.16 1072942200 01.01.2004 08:30:00 3354.16 1072942320 01.01.2004 08:32:00 3354.16 1072942440 01.01.2004 08:34:00 3354.16 1072942560 01.01.2004 08:36:00 3354.16 1072942680 01.01.2004 08:38:00 3354.16 1072942800 01.01.2004 08:40:00 3354.16 1072942920 01.01.2004 08:42:00 3354.16 1072943040 01.01.2004 08:44:00 3354.16 1072943160 01.01.2004 08:46:00 3354.17 1072943280 01.01.2004 08:48:00 3354.17 1072943400 01.01.2004 08:50:00 3354.17 1072943520 01.01.2004 08:52:00 3354.17 1072943640 01.01.2004 08:54:00 3354.17Die ersten 6 Zeilen sind nicht wichtig. Ich möchte aber den Rest einlesen oder auf einen bestimmten Wert zugreifen können.
Das Erste ist die ID, die am Anfang steht. Danach folgt ein TAB-Einschub. Dann das Datum gefolgt von der Uhrzeit. Diese Daten sind sehr wichtig für mich. Getrennt sind diese durch ein Space. Im Anschlusss (auch sehr wichtig) der Wert. Mit einem TAB-Einschub vom Rest getrennt. Wie bekomme ich die Daden aus den einzelnen Zeilen gefiltert und den Index der Zeile?
Bitte helft mir. Habt ihr ein Quelltextbeispiel?
-
Liegen denn die Daten wie gezeigt im *.dat-File oder ist das schon eine interpretierte Variante von Binärdaten?
-
Die Werte liegen wie dargestellt in dem *.dat-File. Es sind keine Binärwerte. Im Grunde würde ich jeden Wert gerne als AnsiString haben wollen.
-
Mit TStringList einlesen
Jeden String in der Liste durchlaufen und mit SubStr zuerlegen.
-
Hallo
Du kannst jede beliebige Textdatei unabhängig von der Dateiendung mit den üblichen Mitteln wie std::ifstream oder TStringList öffnen. Letzeres ist im Builder wohl die direkteste Variante um AnsiString zu bekommen. Siehe BCB-Hilfe, FAQ und Forumsuche hier im BCB-Forum zum Umgang mit TStringList.
bis bald
akari
-
Hi...
Also ich würde für die Daten eine Struktur anlegen und diese dann in einem
Vector oder einer Liste speichern. Eine Map wäre vielleicht auch nicht schlecht
hier könntest du die ID als Key verwenden und den Rest der daten als Value.Hier mal ein Beispiel mit nem Vector:
#include <string> #include <vector> #include <fstream> #include <iostream> using namespace std; //Struktur für die Daten struct Data { string id; string date; string time; string value; }; int main(void){ Data* dat; //Pointer auf die Daten-Struktur fstream file; //Filestream string buffer; //Hilfsvariable vector<Data*> datalist; //Vector mit Pointern auf die Daten //Datei zum lesen öffnen file.open("data.dat", ios::in); //Wenn öffnen erfolgreich if (file.good()){ //Die ersten 7 Zeilen überspringen for (int i=0;i<7;++i){ getline(file,buffer); } //Daten in die Struktur lesen und in den Vector packen while(file>>buffer){ dat = new Data; dat->id = buffer; file>>dat->date; file>>dat->time; file>>dat->value; datalist.push_back(dat); } } }In dem Beispiel sind alle Daten als string angelegt, müsstest du dann eventuell
während des einlesens noch in deine gewünschten Datentypen umwandeln.
-
Hallo,
Ich würde das so machen.
std::vector<std::string> str_vect; std::string tstr; std::ifstream ein("data.dat"); while( getline(ein, tstr)) str_vect.push_back(tstr); size_t count(str_vect.size()); if( count < 8 ) { // Fehlerbehandlung } else { std::stringstream str; std::string s1, dat1, dat2; double d1; for( size_t i=6; i<count; ++i) { str.str(str_vect[i]); str >> s1 >> dat1 >> dat2 >> d1; //jetzt kannst du mit deinen Daten irgendwas machen } }