Laden...

Forenbeiträge von lschwarz Ingesamt 6 Beiträge

04.04.2019 - 16:52 Uhr

Vielen Dank für die ganzen Antworten.

Dass dies ein absolut unschöner Weg ist, ist mir absolut bewusst. Ich bin momentan nur dabei C# zu lernen und dachte, das ist doch vielleicht eine ganz interessante Aufgabe.

Dann versuche ich mal mein Glück über die API. Vielen Dank!

04.04.2019 - 15:17 Uhr

Genau, das Problem liegt am Quelltext an sich. Das downloaden mit C# funktioniert ganz normal. Ich denke auch, dass da vielleicht durch Javascript etwas noch hinzugefügt wird.

Ich weiß, das hier ist kein HTML Forum, aber vielleicht hat ja noch jemand eine Lösung.

04.04.2019 - 15:02 Uhr

Hallo zusammen,

ich würde gerne ein Programm schreiben, welches im Quelltext der Website nach einem String sucht. Folgende Methode habe ich dazu geschrieben, um den Quelltext zu bekommen:


        public static string downloadWebPage(string URL)
        {
            WebClient client = new WebClient();

            string s = client.DownloadString(URL);

            //Schreibt den Quelltext noch in eine Textdatei auf dem Desktop
            File.WriteAllText("C:\\Users\\Luca\\Desktop\\text.txt", s);
            return s;
        }

Wenn ich das nun beispielsweise auf die Seite der Sendungsverfolgung von DHL anwende sehe ich, dass das so nicht funktioniert. Wenn ich den Quelltext im Browser öffne, ist die Webseite auch nicht vollständig zu sehen. Ich würde gerne im Quelltext nach den Worten "zugestellt" suchen, um zu wissen, ob die Sendung zugestellt ist. (mithilfe von Contains())

Ich kenne mich mit HTML nicht sonderlich gut aus und weiß nicht, warum die der Quelltext nicht dem angezeigten entspricht. Evtl. könnt Ihr mir da weiter helfen.

Vielen Dank und beste Grüße

17.07.2018 - 13:17 Uhr

Hallo zusammen,

da ich mir im Moment die Programmierung beibringe habe ich mir ein kleines Projekt erstellt. Es ist eine WPF-Anwendung, bei der der Nutzer die Geschwindigkeit eines Körpers und den Radius einer Kurve eingibt. Darauf gibt die Anwendung die Zentrifugalbeschleunigung, den G-Faktor und nach Eingabe der Masse des Körpers auch die Zentrifugalkraft aus. Ich habe dies alles in einer Klasse gemacht. Dies ist der Code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


namespace FliehkraftRechner
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        const double gravity = 9.81;

        public MainWindow()
        {
            InitializeComponent();

            SetCursor(TextBoxGeschwindigkeit);
        }

        private void ButtonCalc_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                double zentrBeschl = CalcZentrBeschl(double.Parse(TextBoxGeschwindigkeit.Text), double.Parse(TextBoxRadius.Text));
                double gFactor = CalcGFactor(zentrBeschl);
                if (!String.IsNullOrEmpty(TextBoxMasse.Text))
                {
                    double zentrKraft = CalcZentrKraft(zentrBeschl, double.Parse(TextBoxMasse.Text));
                    PrintErgebnis(zentrBeschl, gFactor, zentrKraft);
                }
                else
                {
                    PrintErgebnis(zentrBeschl, gFactor);
                }
            }
            catch
            {
                MessageBox.Show("Fehler. Bitte einen gültigen Wert eingeben.");

                TextBoxGeschwindigkeit.Text = "";
                TextBoxRadius.Text = "";
                TextBoxMasse.Text = "";
            }
            finally
            {
                SetCursor(TextBoxGeschwindigkeit);
            }

        }

        // Setzt den Cursor in Ursprungszustand / in TextBox
        public void SetCursor (System.Windows.IInputElement element)
        {
            element.Focus();
        }

        // Berechnet Zentrifugalbeschleunigung und gibt Wert als [m/(s^2)]zurück
        public double CalcZentrBeschl (double v, double r)
        {
            double zentrBeschl = 0.00;
            
            if (v > 0 && r > 0)
            {
                zentrBeschl = (v * v) / r;
                return zentrBeschl;
            }
            else
            {
                return 0.00;
            }
        }

        // Berechnet G-Faktor
        public double CalcGFactor (double zentrBeschl)
        {
            return zentrBeschl / gravity;
        }

        public double CalcZentrKraft (double zentrBeschl, double masse)
        {
            if (masse > 0)
            {
                return zentrBeschl * masse;
            }
            else
            {
                return 0.00;
            }
        }

        // Zeigt die Daten von Zentrifugalbeschl und G-Faktor auf dem Ergebnisfeld an. Überladene Methode
        public void PrintErgebnis (double zentrBeschl, double gFactor)
        {
            TextBoxErgebnisse.Text = $"Zentr.-Beschl.: {zentrBeschl.ToString("0.00")}m/(s^2)\n" +
            $"g-Faktor: {gFactor.ToString("0.00")}G\n";
        }

        public void PrintErgebnis (double zentrBeschl, double gFactor, double zentrKraft)
        {
            TextBoxErgebnisse.Text = $"Zentr.-Beschl.: {zentrBeschl.ToString("0.00")}m/(s^2)\n" +
            $"g-Faktor: {gFactor.ToString("0.00")}G\n" +
            $"Zentr.-Kraft: {zentrKraft.ToString("0.00")}N";
        }
    }
}


Nun habe ich zwei Fragen, welche sich mir als Anfänger nicht erschließen.

  1. Ich habe alle Methoden in die selbe Klasse gepackt. Sobald ich aber das Keyword **static ** zu einer Methode packe, wird mir z.B. eine TextBox rot unterstrichen mit dem Hinweis "Für das nicht statische Feld, die Methode oder die Eigenschaft "MainWindow.TextBoxErgebnisse" ist ein Objektverweis erforderlich. Eigentlich ist es doch so, dass wenn ich keine Instanz einer Klasse erstelle, sondern hier in diesem Falle ja nur eine Berechnung durchführen möchte, die Methode ohne Instanz aufrufen möchte. Oder liegt es daran, dass ich eine Instanz des MainWindows habe?

  2. Wäre es in diesem Falle geschickter, eine Klasse "Berechnung" zu schreiben, welche die ganten Methoden und auch Felder besitzt und dann bei jedem Klick auf den Berechnen-Button eine neue Instanz erstelle. Ich weiß oft noch nicht so ganz, wann ich Dinge lieber in einer Klasse schreiben soll (nach OOP-Mustern) oder wann es sinnvoller ist, das ganze einfach "normal" ohne Klassen und Instanzen zu machen.

Vielen Dank und viele Grüße

12.07.2018 - 16:04 Uhr

Hallo,

vielen Dank für alle Antworten. Der Fehler lag tatsächlich daran, dass die For-Schleife versucht hat, einen Bereich zu ändern, der nicht verfügbar war. Dies konnte ich lösen. Für künftige Projekte werde ich mir Listen anschauen und auch das MVVM Pattern.

Viele Grüße

12.07.2018 - 14:21 Uhr

Hallo zusammen,

ich bin neu hier und fange dieses Jahr mein Studium an und möchte mir schonmal ein Paar Grundlagen in der Programmierung aneignen. Ich habe eine CSV-Datei, in der alle Haltestellen der deutschen Bahn gespeichert sind. Nach folgendem Schema:


EVA_NR;DS100;IFOPT;NAME;VERKEHR;LAENGE;BREITE;STATUS
8000001;KA;de:05334:1008;Aachen Hbf;FV;6,09149900;50,7678000;
8000002;TA;de:08136:1000;Aalen Hbf;FV;10,0962710;48,8410130;
8000004;HA;de:05774:7131;Altenbeken;FV;8,94331900;51,7664330;

Ich möchte gerne die einzelnen Zeilen auslesen und dann über ListBoxItems in einer ListBox in WPF ausgeben. Soweit so gut. Ich habe dazu eine eigene Klasse Bahnhof erstellt. Die sieht folgendermaßen aus:


class Bahnhof
    {
        int id;
        string name;
        string länge;
        string breite;

        public int Id { get { return id; } }
        public string Name { get { return name; } }

        public Bahnhof(int id, string name)
        {
            this.id = id;
            this.name = name;
        }

    }

Und der Code der MainWindow-Klasse folgendermaßen:


public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonLade_Click(object sender, RoutedEventArgs e)
        {
            Bahnhof[] bahnhöfe;
            ListBoxItem[] lbi;

            OpenFileDialog ofd = new OpenFileDialog();
            if(ofd.ShowDialog() == true)
            {
                string dateiname = ofd.FileName;
                string[] zeilen = File.ReadAllLines(dateiname);

                bahnhöfe = new Bahnhof[zeilen.Length - 1];
                lbi = new ListBoxItem[zeilen.Length - 1];
                

                for (int i = 1; i < zeilen.Length; i++)
                {
                    string[] teile = zeilen[i].Split(';');
                    bahnhöfe[i] = new Bahnhof(int.Parse(teile[0]), teile[1]);
                    lbi[i] = new ListBoxItem();
                    lbi[i].Content = bahnhöfe[i].Id + bahnhöfe[i].Name;
                    ListBox1.Items.Add(lbi[i]);
                }
            }
        }
    }


Leider erhalte ich eine Exception: System.IndexOutOfRangeException. Nachricht = Der Index war außerhalb des Arraybereichs.

Die GUI möchte ich noch sehr schlicht halten, und beschränke mich daher auf einen Button "Lade" und eine Listbox für die Anzeige der Items.

Ich bedanke mich jetzt schon für eure Hilfe!

Viele Grüße
Luca