HI,
Ich bin neu hier und muss euch gleich mit einem Problem belästigen.
Für die Schule muss ich ein Messwertprogramm erstellen. Die Daten werden in die Richtextbox geladen und dann wird der Mittelwert berechnet. Soweit so gut.
Die Aufgabe lautet nun ein Programm zu entwickeln, dass die Dezimalpunkte der Messwertergebnisse in Kommas umwandelt.
Die Textdatei ist folgendermaßen aufgebaut:
Datum/Uhrzeit Raum1 Raum2 Raum3 Raum4 Raum5 Raum6 Raum7 Mittelwert
07.09.09 00:08 18.0 18.0 20.0 18.0 19.0 22.0 20.0 19.29
Das Problem für mich ist, dass die Punkte beim Datum nicht geändert werden sollen.
Ein Lösungsansatz habe ich überhaupt noch nicht, ich hab einzing un alleine das:
private void button1_Click(object sender, EventArgs e)
{
//Daten der Textbox laden
richTextBox1.LoadFile("Cleopatra.txt", RichTextBoxStreamType.PlainText);
}
private void button2_Click(object sender, EventArgs e)
{
//Mittelwert aller vorhandenden Daten ausrechnen
//Help-Variable erstellen
double Mittel = 0;
string help = richTextBox1.Text;
string[] zeilen = help.Split('\n');
int zNr = 0;
//Schleife starten, um alle Zahlen aus zu lesen
foreach (string zeile in zeilen)
{
zNr++;
if((zNr > 4) & (zeile.Length > 0))
{
string[] detail = zeile.Split('\t');
Mittel = Mittel + Convert.ToDouble(detail[3]);
}
}
//Mittelwert berechnen
Mittel = Mittel / 24;
//Mittelwert ausgeben
MessageBox.Show("Mittel = " + Mittel.ToString());
}
Ich hoffe ihr könnt mir helfen.
Schöne Grüße
Dominik
P.S. Hoffe bin hier richtig.
Hallo Montana,
du benutzt doch String.Split und Convert.ToDouble (besser wäre double.Parse). Das ist doch schon mal gut.
Aus meiner Sicht, musst du nur noch zwei Sachen machen:
Beachte trotzdem vorsorglich [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
herbivore
schau dir mal die jeweilige .ToString() Methode (int.ToString(), double.ToString() etc) sowie die Formatstrings im msdn an.
Das Problem für mich ist, dass die Punkte beim Datum nicht geändert werden sollen.
...if((zNr > 4) & (zeile.Length > 0)) { string[] detail = zeile.Split('\t'); Mittel = Mittel + Convert.ToDouble(detail[3]); } ... Mittel = Mittel / 24;
Deine Messwerte sind durch '\t' getrennt? Dann kannst Du doch Datum und Uhrzeit nach dem Split ausschließen, indem Du auf die entsprechenden Feldelemente gar nicht zugreifst. Nichtsdestotrotz solltest Du nur mit CultureInfo.InvariantCulture arbeiten, wie herbivore schon schrieb.
Wie soll eigentlich Dein Mittelwert gebildet werden? Du benutzt oben nur den Wert für Raum 2.
Schließlich sollte die Gesamtsumme natürlich durch die Anzahl geteilt werden, nicht durch eine Konstante (24).
Wenn ich das richtig verstanden habe willst du die Zahlen, welche als Zeichenfolge vorliegen in Double parsen. Das geht sehr gut, indem du Kultureinstellungen verwendest. Die folgende Funktion wandelt dir einen String in eine Double-Zahl um, du kannst den verwendeten Dezimalseparator festlegen.
using System.Globalization;
public double ParseStringToDouble (string sValue, string sDecimalSep, string sGroupSep)
{
private NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo;
//Dezimaltrennzeichen festlegen
nfi.NumberDecimalSeparator = sDecimalSep;
//Tausendertrennzeichen festlegen
nfi.NumberGroupSeparator = sGroupSep;
double dRetVal = 0.0;
if (Double.TryParse(sValue, NumberStyles.Number, nfi, out dRetVal))
{
}
else
{
dRetVal = Double.NaN;
}
return dRetVal;
}
Beste Grüße
"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de