Auslesen einer Structur (mal was für Profis)
-
Hallo Leute habe mal wieder ein Problem.
folgenes Problem ich schreibe daten einer Struktur in eine Datei und
und habe mir dazu eine eigene Klasse restellt. Das fuzt auch hervorragend
Hier der Code der Klasse#include "stdafx.h" #include "RechenoptionDlg.h" #include <time.h> class CDaten_Schreiben : public CDialog { public: typedef struct Rechendaten { CString Rechen_Variante; CString Aufgaben_Typ; CString Rechen_Datum; CString Aufgabe_Gestellt; CString Aufgabe_Vorschlag; CString Aufgabe_Loesung; CString Status_Loesung; CString Loesung_Zeit; CString Status_Zeitvorgabe; CString Zeitvorgabe_Aufgabe; }gebe_Daten; Rechendaten Daten; CString Anmeldename; CString Pfadanname; void Grunddaten(CString Z1_RechenVariante, CString Z1_RechenTyp, CString Z1_AufGestellt,CString Z1_AufVorschlag, CString Z1_AufLoesung, CString Z1_StatusLoesung, CString Z1_LoesungZeit,CString Z1_StatusZeitvorgabe) { CStdioFile datei1("C:\\RMUser.ini", CFile::modeRead); UpdateData(TRUE); datei1.ReadString(Anmeldename); datei1.Close(); CStdioFile datei2( "C:\\RMlog.ini", CFile::modeRead ); UpdateData( TRUE ); datei2.ReadString( Pfadanname); datei2.Close(); Daten.Aufgabe_Gestellt = Z1_AufGestellt; Daten.Aufgabe_Vorschlag = Z1_AufVorschlag; Daten.Rechen_Variante = Z1_RechenVariante; Daten.Aufgaben_Typ = Z1_RechenTyp; CTime curTime1 = CTime::GetCurrentTime(); Daten.Rechen_Datum.Format("%d.%d.%d",curTime1.GetDay(),curTime1.GetMonth(),curTime1.GetYear()); Daten.Aufgabe_Loesung = Z1_AufLoesung; Daten.Status_Loesung = Z1_StatusLoesung; Daten.Loesung_Zeit = Z1_LoesungZeit; Daten.Status_Zeitvorgabe = Z1_StatusZeitvorgabe; // Daten.Zeitvorgabe_Aufgabe = Z1_ZeitvorgabeAufgabe; CString Logdatei = Pfadanname + "\\" + Anmeldename + "DBank.rm1"; CFileFind find9; if(find9.FindFile(Logdatei) == FALSE) { CStdioFile dateiDB(Pfadanname + "\\" + Anmeldename + "DBank.rm1",CFile::modeCreate | CFile::modeWrite); dateiDB.SeekToEnd(); dateiDB.Close(); MessageBox("Protokolldatei wurde neu erstellt","Systemnachricht",64); } CStdioFile dateiDB(Pfadanname + "\\" + Anmeldename + "DBank.rm1",CFile::modeWrite | CFile::modeNoTruncate); dateiDB.SeekToEnd(); dateiDB.WriteString(Daten.Rechen_Variante+Daten.Aufgaben_Typ+Daten.Rechen_Datum+Daten.Aufgabe_Gestellt+Daten.Aufgabe_Vorschlag + Daten.Aufgabe_Loesung + Daten.Status_Loesung + Daten.Loesung_Zeit + Daten.Status_Zeitvorgabe + "\n"); dateiDB.Close(); } };
in der Datei steht dann etwa so was
AdditionA+B=?15.11.20023+6=?3+6=3+6+9nein00:00.3 minINAKTIV
AdditionA+B=?15.11.20023+10=?3+10=3+10+13nein00:00.4 minINAKTIV
AdditionA+B=?15.11.20027+1=?7+1=7+1+8nein00:00.3 minINAKTIV
Addition?+B=C16.11.2002?+1=54+1=54+1+5ja00:02.6 minINAKTIV
Addition?+B=C16.11.2002?+6=1634+6=1610+6+16nein00:02.7 minINAKTIV
Addition?+B=C16.11.2002?+9=112+9=112+9+11ja00:03.4 minINAKTIV
AdditionA+?=C16.11.20024+?=84+4=84+4+8ja00:03.5 min15:0 sec
AdditionA+?=C16.11.20025+?=135+4=135+8+13nein00:02.9 min15:0 sec
AdditionA+?=C16.11.20026+?=146+8=146+8+14ja00:05.1 min15:0 sec
------------------------------------------------------------Was will ich nun tun Ich möchte die Daten in einer Strukturansicht
anzeigen.
Wie ich das mit Datenbanken mache ist nicht das problem aber wie mache
ich das mit struckturenwie kann ich die Daten in einer Struktur filtern
Anzeige soll so aussehen
Addition
A+B=?
…..
?+B=C
….
A+?=C
….
Subtraktion
.
.
.Ich habe nicht den gerinsten plan wie ich auf die Daten zugreifen könnte
und wie ich sie Filtere.Gleich vorne weg ich benutze mit absicht keine Datenbank da die
Dateien vom System erstellt werden und es nicht
sicher ist das die Benutzer alle ein DB Programm auf den Rechner haben.Ich brauche keine komplette lösung sondern nur ein Denkanstoß oder
ein kleines BeispielDanke Vossy
-
typedef struct Rechendaten
{CString Rechen_Variante;
CString Aufgaben_Typ;
CString Rechen_Datum;
CString Aufgabe_Gestellt;
CString Aufgabe_Vorschlag;
CString Aufgabe_Loesung;
CString Status_Loesung;
CString Loesung_Zeit;
CString Status_Zeitvorgabe;
CString Zeitvorgabe_Aufgabe;}gebe_Daten;
Laut deinem Programm muss doch "gebe_Daten" in "Daten" umgeändert werden?
Sorry, dass ich dir nicht weiter helfen konnte.
-
Du müsstest in der Datei zwischen den Einzeldaten Trennzeichen einbauen.
Devil
-
das auslesen in eine struktur ist so nicht möglich, weil CStrings immer ne variable Länge haben. Entweder mit festen char arrays arbeiten oder anders einlesen
-
Das kann ja nicht sein da ja eine Doppelte Difenition entstehen würde
typedef struct Rechendaten
{CString Rechen_Variante;
CString Aufgaben_Typ;
CString Rechen_Datum;
CString Aufgabe_Gestellt;
CString Aufgabe_Vorschlag;
CString Aufgabe_Loesung;
CString Status_Loesung;
CString Loesung_Zeit;
CString Status_Zeitvorgabe;
CString Zeitvorgabe_Aufgabe;}gebe_Daten;// kann auch entfallen
Rechendaten Daten;//neudeffenition der Struct
Macht nichts das du mir nicht helfen kannst
ist auch etwas anspruchsvollerbin mitlerweilen etwas weiter
mFile.Open(Pfadannahme111 + "\\" + Anmeldename111 + "DBank.rm1", CFile::modeRead,NULL ); while (mFile.ReadString(Daten_lesen.Rechen_Variante)) { MessageBox(Daten_lesen.Rechen_Variante); aab++; } mFile.Close();
Das Auslesen geht jetzt aber es wird immer die gesammte Zeile Übergeben
z.B. AdditionA+B=?15.11.20023+6=?3+6=3+6+9nein00:00.3 minINAKTIV
es sollte aber nur Addition übergeben werden.
Wieso kann ich nicht auf einm einzelnes Struc element zugreifenVossy
-
Du musst den String parsen.
Füge zwischen den einzelnen Elementen ambesten Trennzeichen hinzu,
so das du sie unterscheiden kannst.Devil
-
Ich würde Dir XML empfehlen
-
Danke euch allen
zu RenéG
mit XML kenne ich mich nicht aus zuminsest noch nicht.
zu devil81
Das mit den Zwischenzeichen hört sich gut an und
das habe ich auch gemachtDas sieht dann in der Datei so aus
Addition'A+?=C'16.11.2002'8+?=9'8+=9'8+1=9'nein'00:00.5 min'INAKTIV'
Das Trennzeichen ist "'"
Jetzt meine Frage wie soll ich das am einfachsten zerschneiden
Vossy
-
CString::Right, CString::Left, CString::Mid
Devil
-
Ja, entweder du benutzt Trennzeichen und die CString-Funktionen, oder du verwendest ein CFile mit CArchive (die Klasse verwaltet Trennzeichen intern). XML ist in deinem Fall nicht nötig
-
Ich habe es mit trennstriche gelöst
Danke euch allen
Vossy