Exemplo n.º 1
0
        /// <summary>
        /// Verkehrsnetz aus Datei einlesen und Liste bzw. Graphen aufbauen
        /// Format der Datei:
        ///     Knotenname;Nachbar 1;Entfernung;Linie;Nachbar 2;Entfernung;Linie;...
        /// Annahme: Pro Datei wird nur die Information für 1 Linie angegeben
        /// </summary>
        public void Einlesen()
        {
            // Datei öffnen
            StreamReader sr = new StreamReader(@"..\..\input\LinieU2.txt");

            // Leeres Linienobjekt erzeugen
            Linie linie = new Linie();

            // Solange lesen bis das Ende der Datei erreich ist
            while (!sr.EndOfStream)
            {
                // Einzelne Zeile lesen
                string zeile = sr.ReadLine();

                // Gelesene Teile in Blöcke zerteilen - Trennzeichen: Strichpunkt ;
                string[] bloecke = zeile.Split(';');

                // An erster Position muss immer der Knotenname (die Station) stehen
                // Diese fügen wir in die Stationenliste unserer Linie ein
                linie.ErsteStationEinfuegen(bloecke[0]);

                // Ausgabe des Stationennamens
                Console.Write("{0}: ", bloecke[0]);

                // Ebenso wird der erste Block (= Knoten) in den Graphen eingefügt
                this.StationInGraphEinfuegen(bloecke[0]);

                // Es können beliebig viele Nachbarn in der Datei stehen
                // Die Schleife iteriert über alle Blöcke bis die Gesamtlänge erreicht wurde
                // Es wird jeweils immer um +3 weitergesprungen, da pro Nachbar
                // 3 Informationen vorhanden sind (Name, Entfernung, Linie)
                for (int i = 1; i < bloecke.Length; i = i + 3)
                {
                    // Ignoriere leere Blöcke (z.b. vom Ende der Linie)
                    if (bloecke[i] != "")
                    {
                        // Nachbar ausgeben
                        Console.Write("{0}, ", bloecke[i]);

                        // Nachbar in Graph einfügen = Verbindung zw.
                        // zwei Knoten aufbauen
                        this.NachbarVerbindungEinfuegen(bloecke[0], bloecke[i]);
                    }
                }

                Console.WriteLine();    // Leerzeile erzeugen
            }

            // Als Test geben wir die gesamte Stationenliste nochmals aus
            Console.WriteLine("########################");
            linie.AusgabeStationen();

            // Einfügen der aktuell erstellten Linie (Linienobjekt mit Stationenliste)
            // in die Übersicht des Verkehrsnetzhelpers
            this.LinieEinfuegen("u2", linie);
        }
Exemplo n.º 2
0
        public void EinlesenAlt()
        {
            try
            {
                StreamReader reader = new StreamReader(@"..\..\input\ubahn_km.csv");
                int distanceBefore = 0;
                string linieBefore = "";
                string stationBefore = "";
                Linie linie = null;

                while (!reader.EndOfStream) {
                    string line = reader.ReadLine();
                    string[] junks = line.Split(';');
                    if (junks.Length == 3)
                    {
                        if (linieBefore != junks[0])
                        {
                            // create new list
                            linie = new Linie(junks[0], "");
                            this.LinieEinfuegen(junks[0], linie);
                        }

                        // add station to linie
                        linie.LetzteStationEinfuegen(junks[1]);

                        // calculate distance
                        int distance = int.Parse(junks[2]) - distanceBefore;

                        // add station to graph
                        this.StationInGraphEinfuegen(junks[1]);

                        // connect neighbor, but exclude line changes
                        if (stationBefore != "" && linieBefore == junks[0])
                        {
                            this.NachbarVerbindungEinfuegen(stationBefore, junks[1]);
                            this.NachbarVerbindungEinfuegen(junks[1], stationBefore);
                        }

                        //Console.WriteLine("{0}: {1} - Distance: {2}", junks[0], junks[1], distance);
                        distanceBefore = int.Parse(junks[2]);
                        stationBefore = junks[1];
                        linieBefore = junks[0];
                    }
                    else
                    {
                        Console.WriteLine("Incorrect structure in line: {0}", line);
                    }
                }
            }
            catch (Exception)
            {

                throw;
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Einfügen einer Linie in eine Übersicht vom Typ Dictionary
 /// </summary>
 /// <param name="name">Name der einzufügenden Linie (eindeutig)</param>
 /// <param name="linie">Objekt einer Linie</param>
 /// <returns>true wenn das Einfügen erfolgreich war - false bei Misserfolg</returns>
 public bool LinieEinfuegen(string name, Linie linie)
 {
     bool gefunden = this.uebersichtLinien.ContainsKey(name);
     if (gefunden == false)
     {
         this.uebersichtLinien.Add(name, linie);
         return true;
     }
     else
     {
         return false;
     }
 }