Veröffentlicht 22. Oktober 200915 j Hallo, bin neu hier ^^! Ich heiße Nadine und befinde mich zur Zeit im 1.Ausbildungsjahr zur Fachinformatikerin. Ich bin noch blutige Anfängerin in C#, da ich vorher nur mit Visual Basic programmiert habe. Ich sollte einen Taschenrechner programmieren, was ich auch soweit hin bekommen habe. Nun soll ich die Rechenoperation in eine Textdatei schreiben, sprich: 12 - 3 = 9 9 + 2 = 11 11 * 5 = 55 55 / 10 = 5,5 usw. Ich habe die Variablen wert1, wert2 und ergebnis. Wie schreibe ich sie in eine Textdatei? Ich freue mich sehr über eure Antworten :-)
22. Oktober 200915 j Hi, schau die mal diese Klassen an: FileStream-Klasse (System.IO) StreamWriter-Klasse (System.IO) Dort findest du auch Beispiele zu den Klassen. LG Flo
23. Oktober 200915 j Danke für deine Antwort, aber ich werde leider nicht draus schlau ^^" Ich hab noch nicht mit Klassen gearbeitet. Hier mein Code, falls es dann verständlicher ist: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } double wert1 = 0; double wert2 = 0; double ergebnis = 0; double zahl1 = 1; double zahl2 = 2; double zahl3 = 3; double zahl4 = 4; double zahl5 = 5; double zahl6 = 6; double zahl7 = 7; double zahl8 = 8; double zahl9 = 9; double zahl0 = 0; bool plus = false; bool minus = false; bool mal = false; bool geteilt = false; bool geklickt = false; bool komma = false; private void button14_Click(object sender, EventArgs e) { if (geklickt) { textBox1.Text = ""; geklickt = false; } if (textBox1.Text.StartsWith("0")) { textBox1.Text = "0"; } else { textBox1.Text += zahl0.ToString(); } } private void button5_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl1.ToString(); } private void button6_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl2.ToString(); } private void button7_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl3.ToString(); } private void button8_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl4.ToString(); } private void button9_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl5.ToString(); } private void button10_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl6.ToString(); } private void button11_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl7.ToString(); } private void button12_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl8.ToString(); } private void button13_Click(object sender, EventArgs e) { if (textBox1.Text == "0") { textBox1.Text = ""; } if (geklickt) { textBox1.Text = ""; geklickt = false; } textBox1.Text += zahl9.ToString(); } private void button16_Click(object sender, EventArgs e) { textBox1.Text = ""; } private void plusButton_Click(object sender, EventArgs e) { if (textBox1.Text == "") { textBox1.Text = "0"; } else { this.wert1 = Convert.ToDouble(textBox1.Text); geklickt = true; plus = true; minus = false; mal = false; geteilt = false; } } private void button2_Click(object sender, EventArgs e) { if (textBox1.Text == "") { textBox1.Text = "0"; } else { this.wert1 = Convert.ToDouble(textBox1.Text); geklickt = true; minus = true; plus = false; mal = false; geteilt = false; } } private void button3_Click(object sender, EventArgs e) { if (textBox1.Text == "") { textBox1.Text = "0"; } else { this.wert1 = Convert.ToDouble(textBox1.Text); geklickt = true; mal = true; plus = false; minus = false; geteilt = false; } } private void button4_Click(object sender, EventArgs e) { if (textBox1.Text == "") { textBox1.Text = "0"; } else { this.wert1 = Convert.ToDouble(textBox1.Text); geklickt = true; geteilt = true; plus = false; minus = false; mal = false; } } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text.Contains(",")) { komma = false; } else { komma = true; textBox1.Text += ","; } } private void button15_Click(object sender, EventArgs e) { if (textBox1.Text.IndexOf("-") >= 0) { textBox1.Text = textBox1.Text.Remove(0, 1); } else { textBox1.Text = "-" + textBox1.Text; } } private void gleichButton_Click(object sender, EventArgs e) { if (textBox1.Text == "") { textBox1.Text = "0"; } if (wert1 == 0) { ergebnis = Convert.ToDouble(textBox1.Text); } wert2 = Convert.ToDouble(textBox1.Text); if (wert1<0 & wert2 <0) { ergebnis = wert1 + wert2; geklickt = false; plus = false; minus = false; mal = false; geteilt = false; } if (wert2 <0 & wert1 >0) { ergebnis = wert1 - wert2; geklickt = false; plus = false; minus = false; mal = false; geteilt = false; } if (plus == true) { ergebnis = (wert1) + (wert2); } if (minus == true) { ergebnis = (wert1) - (wert2); } if (mal == true) { ergebnis = (wert1) * (wert2); } if (geteilt == true) { if (wert2 == 0) { textBox1.Text = "ERROR"; } else { if (wert1 == wert2) { ergebnis = 1 / wert1; textBox1.Text = ergebnis.ToString(); } else { ergebnis = (wert1) / (wert2); textBox1.Text = ergebnis.ToString(); } } } else { textBox1.Text = ergebnis.ToString(); } wert2 = 0; wert1 = 0; ergebnis = 0; plus = false; minus = false; mal = false; geteilt = false; } private void button17_Click(object sender, EventArgs e) { } } } Ich möchte das Schreiben in eine Textdatei durch einen Button Klick auslösen. Es soll jedesmal die einegebene Rechnung (z.B. 9 + 2 = 11) in eine neue Zeile geschrieben werden. Vielleicht so: StreamWriter MyStreamWriter = new StreamWriter(@"C:\Dokumente und Einstellungen\nm\Eigene Dateien\Taschenrechner\taschenrechner.txt"); MyStreamWriter.Write(wert1.ToString() + wert2.ToString()) = ergebnis.ToString(); ??? Wie bekomme ich es hin, das wenn ich auf + klicke auch plus zwischen wert1 und wert2 steht und wenn da - steht, eben -? Vielleicht mit meiner Variablen "geklickt" die alle Operatoren beinhaltet?
23. Oktober 200915 j Hi, Ich hab noch nicht mit Klassen gearbeitet. Doch, wenn auch unbewusst... double zahl1 = 1; double zahl2 = 2; double zahl3 = 3; double zahl4 = 4; double zahl5 = 5; double zahl6 = 6; double zahl7 = 7; double zahl8 = 8; double zahl9 = 9; double zahl0 = 0; Brauchst du diese wirklich? Wenn ja, pack das in ein double-Array, das ist einfacher. Vielleicht mit meiner Variablen "geklickt" die alle Operatoren beinhaltet? Nein, das ist doch eine bool-Variable. StreamWriter MyStreamWriter = new StreamWriter(@"C:\Dokumente und Einstellungen\nm\Eigene Dateien\Taschenrechner\taschenrechner.txt"); MyStreamWriter.Write(wert1.ToString() + wert2.ToString()) = ergebnis.ToString(); Das sieht doch schon ganz brauchbar aus:beagolisc Alles was du brauchst steht doch in der Textbox (textbox1) drin, einfach deren Text in die Datei schreiben, und danach MyStreamWriter schließen. So sollte es gehen: StreamWriter writer = null; if (!File.Exists("hier kommt der filename hin")) { writer = new StreamWriter(File.Create("filename")); } else { writer = new StreamWriter(File.Open("filename",FileMode.Append, FileAccess.Write)); } writer.WriteLine(textbox1.Text); writer.Close();
23. Oktober 200915 j Super, danke es funktioniert ^^! Aber in der Textdatei steht nur das Ergebnis. Ich möchte ja gerne, das da z.B. 12 - 3 = 9 steht.
23. Oktober 200915 j Ja ist ja auch logisch, Du schreibst mit deinem Writer ja auch nur TextBox1.Text in die Datei. writer.WriteLine(String.Format("{0} {1} {2} = {3}", wert1.ToString(), operator, wert2.ToString(), ergebnis.ToString()); operator müßtest du natürlich noch füllen, je nach Rechenoperation.
23. Oktober 200915 j So sollte es gehen: StreamWriter writer = null; if (!File.Exists("hier kommt der filename hin")) { writer = new StreamWriter(File.Create("filename")); } else { writer = new StreamWriter(File.Open("filename",FileMode.Append, FileAccess.Write)); } writer.WriteLine(textbox1.Text); writer.Close(); Igitt, dann doch lieber diesen Konstruktor benutzen, da muss man nicht abfragen, ob die Datei bereits existiert. (Programmierer, schreibfaul und so. :floet:) (Außerdem gibts ja noch FileMode.OpenOrCreate)
29. Oktober 200915 j Ich bins nochmal. Also wie gesagt läuft alles soweit. Jetzt soll ich meine Aufgabe erweitern. Es soll nicht nur 9 + 2 = 11 in die Textdatei geschrieben werden, sondern z.B.: 6 + 2 - 3 + 4 * 5 / 3 = 15 Die Variablen wert1 und wert2 merken sich ja immer nur die zuletzt eingebenen Zahlen und ob + - * oder / geklickt wurde. Wie kann ich das am besten anstellen? Hier nochmal der Code: StreamWriter writer = null; if (!File.Exists(Path.Combine(Application.StartupPath, "taschenrechner.txt"))) { writer = new StreamWriter(File.Create(Path.Combine(Application.StartupPath, "taschenrechner.txt"))); } else { writer = new StreamWriter(File.Open("taschenrechner.txt", FileMode.Append, FileAccess.Write)); } string log = Convert.ToString(wert1); if (plus == true) { log = log + " + "; } if (minus == true) { log = log + " - "; } if (mal == true) { log = log + " * "; } if (geteilt == true) { log = log + " / "; } log = log + Convert.ToString(wert2) + " = " + textBox1.Text; writer.WriteLine(log); writer.Close();
29. Oktober 200915 j Wie kann ich das am besten anstellen? Mehr in Klassen denken. Bsp: public interface ICalculationTerm { double Value1; double Value2; char Operator; double Result; }
29. Oktober 200915 j Tut mir leid, ich habe noch nicht mit Klassen gearbeitet :-( Wie gesagt ich bin totale Anfängerin. Wo genau soll der Code hin und wozu dient er genau?
29. Oktober 200915 j Das ist eigentlich nur ein Interface für Klassen. D.h. alle Klasse, die dieses Interface implementieren, müssen diese Properties zur Verfügung stellen. Sinn der Klasse ist ganz einfach; als Beispiel nehm ich mal die von dir vorgegebene Gleichung: 6 + 2 - 3 + 4 * 5 / 3 = 15 Diese verlegt man in Teilstücke, d.h.: ICalculationTerm1(6, 2,+)ICalculationTerm2(ICalculationTerm1.Result, 3,-)ICalculationTerm3(4, 5,*)ICalculationTerm4(ICalculationTerm3.Result, 3,/)ICalculationTerm5(ICalculationTerm2.Result, ICalculationTerm4.Result,+) Ergo: ICalculationTerm5.Result == 33.333333333 Bearbeitet 29. Oktober 200915 j von TDM
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.