Datei einlesen und grafisch auswerten
-
{ CString LineToRead, helpstring; CStdioFile datei; datei.Open("deinedatei", CFile::modeRead); // Datei öffnen datei.SeekToBegin(); for (int i = 0; i < zahl /*beginn der messwerte*/; i++) { datei.ReadString(LineToRead); //Dateikopf solange einlesen, bis Messwerte erreicht }//messwerte erreicht datei.ReadString(LineToRead); while(!LineToRead.IsEmpty()) { pos = LineToRead.Find(" "); // Leerzeichen suchen: Wert zuende helpstring = LineToRead.Left(pos); // in einen string speichern datei.ReadString(LineToRead); } }habe den code zwar gekürzt, aber müsste trotzdem funktionieren. es müsste auch möglich sein, die werte anschliessend in ein array zu übertragen, bspw über formatierung in double-werte, um das dann grafisch darzustellen.
find und findoneof sind funktionen der klasse cstring, damit kann man strings auf bestimmte zeichen und zeichenfolge untersuchen,schau dir am besten mal die memberfunktionen der cstring klasse in der msdn an.
-
Vielen Dank!
Wie kann ich dann die Messwerte im String (Variblen) ansprechen? Oder besser gesagt, wie kann ich dann die einzelnen Messwerte herausholen?
-
du hast in dem string jeweils nur einen messwert, er liest ja eine zeile ein, sucht das ende des messwertes und speichert diesen dann in den helpstring. was ich da grade vergessen habe, ist, dass du den wert noch umspeichern musst, in ein array oder sowas. und zwar am besten, bevor du die neue zeile einliest, also direkt nach dem befehl
helpstring = LineToRead.Left(pos)
-
ok das leuchtet mir ein.
Aber dann habe ich ja am Schluss einen Arrey mit z.B 200 Messwerten. Wie finde ich denn dann noch den Messwert?Funktioniert dies so: helpstring = helpstring & LineToRead.Left(pos) & ";"
Ich möchte einfach immer nach dem Messwert ein ; einfügen damit ich dann später das ganze wieder teilen kann?!?!?!
-
addict schrieb:
ok das leuchtet mir ein.
Aber dann habe ich ja am Schluss einen Arrey mit z.B 200 Messwerten. Wie finde ich denn dann noch den Messwert?naja, du kannst ja jeden messwert in einem eigenen element speichern und dann über ein for-schleife ansteuern.
addict schrieb:
Funktioniert dies so: helpstring = helpstring & LineToRead.Left(pos) & ";"
eher so:
allemesswerte.insert(";");
int stringende = allemesswerte.GetLength();
allemesswerte.insert(stringende, helpstring);die genauen funktionen stehen in der msdn bei cstring, class members. wenn du das gemacht hast, müsste da so ein string rauskommen:
mw1;mw2;mw3;....addict schrieb:
Ich möchte einfach immer nach dem Messwert ein ; einfügen damit ich dann später das ganze wieder teilen kann?!?!?!
bin mir jetzt nicht mehr so sicher, ob ich das richtig verstanden habe, was du machen möchtest. wenn du ein array mit den messwerten anlegst, hat das für jeden wert ein element. da ist dann quasi jeder messwert einzeln
-
Ich möchte im Prinzip einfach alle Messwerte in einer Variablen haben, damit ich später ein Diagramm (in einer schlaufe) zeichnen kann das ganze mit einfachen Linien.
-
dann würde ich das in ein array einlesen, da kannst du dieses array durch eine for-schleife auslesen, dann kannst du jeden einzelnen messwert auswerten und weiterverarbeiten, also array[nr messwert] = wert messwert.
in dem fall solltest du allerdings den cstring über cstring.format in ein double-wert umrechnen.
-
Sorry aber ich verstehe das schon wieder nicht ganz!
Wie würde denn nun das einlesen und dann diese for-Schlaufe aussehen?
Könntest du mir nicht ein Beispiel posten?Vielen Dank für deine Bemühungen!!!!
-
einlesen und in array speichern. am besten global deklarieren: double array[10000]
{ CString LineToRead, helpstring; CStdioFile datei; int lauf = 0; datei.Open("deinedatei", CFile::modeRead); // Datei öffnen datei.SeekToBegin(); for (int i = 0; i < zahl /*beginn der messwerte*/; i++) { datei.ReadString(LineToRead); //Dateikopf solange einlesen, bis Messwerte erreicht }//messwerte erreicht datei.ReadString(LineToRead); while(!LineToRead.IsEmpty()) { pos = LineToRead.Find(" "); // Leerzeichen suchen: Wert zuende helpstring = LineToRead.Left(pos); // in einen string speichern array[lauf] = helpstring.Format()//da fehlen noch parameter, weiss aber nicht mehr welche. //allerdings musst du das cstring in einen double wert formatieren. lauf++; datei.ReadString(LineToRead); } }mit dem helpstring.Format musst du mal etwas experimentieren, da müsste es auch schon einträge hier im forum zu geben. und halt die msdn.
nun das auslesen:for (int i=0; i<lauf; i++) tue irgendwas mit array[lauf], das ist der messwertmit der schleife gehst du einmal durch das gesamte array, und kannst jeden messwert verarbeiten.
-
Im Prinzip ist das schon richtig was Daniel schreibt. Du musst nur aufpassen wenn Du mit den Messwerten arbeiten willst. In der Regel wird Dein Array immer größer sein wie die Anzahl Deiner Werte. Wenn Du Berechungen damit anstellen musst (ich habe bei meinen Messwerten die Standardabweichung Medianwert, Varianzenkoeffizient zu berechnen) darfst Du nicht über den letzten Wert herausschießen. Bei Arrays ist ja eigentlich der Vorteil, dass in einfachen Schleifen über Hochzählen des Feldindexes solche Berechnungen sehr einfach zu implementieren sind. Sind die Arrays größer wie die Anzhal der Messwerte funktioniert das nicht mehr.
Ein Einlesen aller Werte in einen CString mit einem Trennzeichen (m1;m2;m3;...) würde ich nicht machen. Dann muss man wieder mit Positionszeigern arbeiten oder die Trennzeichen detektieren. Sind unnötige Fehlerquellen. Machs wie vorgeschlagen: in einer Schleife die Datei ab der Position des ersten Messwertes in eine Hilfsvariable vom Typ String/CString einlesen und dann sofort in eine Zahl umwandeln und in ein Array speichern.