myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Grundlagen von C# (https://www.mycsharp.de/wbb2/board.php?boardid=88)
--- Mit aus einer Textdatei ausgelesenen Werten weiter rechnen (https://www.mycsharp.de/wbb2/thread.php?threadid=121954)


Geschrieben von Misteraus am 14.06.2019 um 10:31:
  Mit aus einer Textdatei ausgelesenen Werten weiter rechnen
Hallo,

Meine Ziel ist es Zahlen aus einer Text Datei Auszulesen und dann so abzuspeichern, dass ich damit Rechnen kann. Das auslesen der werte vom StreamReader und parsen in Double klappt bisher aber ich kriege es nicht in die werte Nachhaltig zu speichern.

Hier mein Code Snip:

C#-Code:
            for (int i = 0; i < textlines.Count; i++)

            {
                string text = textlines[i];
                double winkel, radius, tiefe;
                int startWinkel = text.IndexOf("Winkel = ");
                int startRadius = text.IndexOf("; Radius = ");
                int startTiefe = text.IndexOf("; Tiefe = ");
                int startEnde = text.Length - 1;

                string sWinkel = text.Substring(startWinkel + 9,(startRadius -(startWinkel+9))); //Anfangswert, Differenz zwischen Anfangswert und nächstenwert                    
                winkel = double.Parse(sWinkel);  //String in Zahlen umwandeln

                string sRadius = text.Substring(startRadius + 11, (startTiefe - (startRadius + 11)));
                radius = double.Parse(sRadius);

                string sTiefe = text.Substring(startTiefe + 10, (startEnde - (startTiefe + 10)));
                tiefe = double.Parse(sTiefe);

                Console.WriteLine(Convert.ToString(winkel) + " ", Convert.ToString(radius) + " ", Convert.ToString(tiefe));


            }

Später will ich die werten in Polarkoordinaten umwandeln, hier ein kleines test Programm:

C#-Code:
///{
            //    double radius = 0, winkel = 0;
            //    double x = 0, y = 0;

            //    try
            //    {
            //        radius = Convert.ToInt16(textBox1.Text);
            //        winkel = Convert.ToInt16(textBox2.Text);

            //        double phi = Convert.ToInt32(winkel * Math.PI / 180.0);
            //        x = (radius * Math.Cos(phi));
            //        y = (radius * Math.Sin(phi));

            //        richTextBox1.Text = "x = " + Convert.ToString(Math.Round(x, 2)) + Environment.NewLine + "y = " + Convert.ToString(Math.Round(y, 2));
            //    }
            //    catch { }

            //}

 Hier habe ich folgenden Code Snip gefunden:

C#-Code:
//Hilfsklasse, die die Messdaten darstellt
class SamplePoint
{
    public SamplePoint(string input)
    {
        var stringValues = input.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
        if (stringValues.Length != 2) throw new FormatException(string.Format(@"Ungültiger Eintrag: ""{0}""", input));

        double x, y;

        if(!double.TryParse(stringValues[0], NumberStyles.Any, CultureInfo.InvariantCulture, out x) ||  !double.TryParse(stringValues[1], NumberStyles.Any, CultureInfo.InvariantCulture, out y))
            throw new FormatException(string.Format(@"Ungültiger Eintrag: ""{0}""", input));
        X = x;
        Y = y;
    }

    public double X { get; private set; }
    public double Y { get; private set; }
}
//Anwendung:
var resultList = File.ReadAllLines("test.txt").Select(line => new SamplePoint(line));
foreach (var samplePoint in resultList)
{
    Console.WriteLine("X: {0}, Y: {1}", samplePoint.X, samplePoint.Y);
}

Da ist eine andere Methoden zum auslesen beschrieben, was ja auch ok ist. Aber ich verstehe nicht woher die Values herkommen

C#-Code:
if(!double.TryParse(stringValues[0], NumberStyles.Any, CultureInfo.InvariantCulture, out x) ||  !double.TryParse(stringValues[1], NumberStyles.Any, CultureInfo.InvariantCulture, out y))

Hier übrigens die text Datei:

Winkel = 263,24; Radius = 100; Tiefe = 25;
Winkel = 260; Radius = 107; Tiefe = 30;
Winkel = 25,75; Radius = 105,7; Tiefe = 35;
Winkel = 284,50; Radius = 110,8; Tiefe = 40;
Winkel = 293; Radius = 105,0; Tiefe = 45;
Winkel = 350; Radius = 108,9; Tiefe = 50;

Idealerweise suche ich nach einfachen Lösungen da ich noch Ziemlich neu bin beim Programmieren


Geschrieben von Taipi88 am 14.06.2019 um 11:07:
 
Hi,

wenn ich dich richtig verstehe kannst du die Datei korrekt auslesen und die Werte auch in entsprechende double-Variablen parsen. Soweit so gut.

Die nächsten Schritte wären:
a) Eine Klasse erstellen, welche Properties für alle 3 Werte anbietet
b) Eine Liste erstellen, welche mehrere Instanzen der vorher genannten Klasse halten kann
c) Mit den Werten rechnen

Grundsätzlich ist das Anfängerwissen und wird eigentlich als gegeben angesehen - falls das nicht der Fall ist - kann ich dir nur das neben schon in der Navi verlinkte OpenBook empfehlen - andernfalls wirst du wohl eher aufgeben als dein Programm fertig schreiben.

Dennoch ein kurzes Beispiel:

Zu a)

C#-Code:
public class MyDataClass
        {
            public double Winkel { get; set; }

            public double Radius { get; set; }

            public double Tiefe { get; set; }
        }

Zu b)

C#-Code:
List<MyDataClass> myValues = new List<MyDataClass>();
            for (int i = 0; i < textlines.Count; i++)

            {
               // dein bisheriger Schleifencode...
                myValues.Add(new MyDataClass { Winkel = winkel, Radius = radius, Tiefe = tiefe});
            }

Wenn du das hast - hast du danach eine Liste von MyDataClass-Objekten mit den entsprechend gemeinsam eingelesenen Werten - diese Liste kannst du ggf. an separater Stelle innerhalb einer for/foreach-Schleife durchlaufen und entsprechend mit arbeiten.

LG


Geschrieben von Misteraus am 18.06.2019 um 08:18:
 
Vielen dank! Schaue mir das jetzt mal genauer an


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.11.2019 06:16