Laden...

Mit aus einer Textdatei ausgelesenen Werten weiter rechnen

Erstellt von Misteraus vor 4 Jahren Letzter Beitrag vor 4 Jahren 865 Views
M
Misteraus Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren
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:


            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:

           

 ///{
            //    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:



//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

 
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

1.029 Beiträge seit 2010
vor 4 Jahren

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)


public class MyDataClass
        {
            public double Winkel { get; set; }

            public double Radius { get; set; }

            public double Tiefe { get; set; }
        }

Zu b)


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

M
Misteraus Themenstarter:in
2 Beiträge seit 2019
vor 4 Jahren

Vielen dank! Schaue mir das jetzt mal genauer an