myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Eine Liste aus einer CSV-Datei erstellen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Eine Liste aus einer CSV-Datei erstellen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
lschwarz
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 6


lschwarz ist offline

Eine Liste aus einer CSV-Datei erstellen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

Code:
1:
2:
3:
4:
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:

C#-Code:
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:

C#-Code:
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
12.07.2018 14:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
steffen_dec steffen_dec ist männlich
myCSharp.de-Mitglied

avatar-701.gif


Dabei seit: 27.03.2007
Beiträge: 322
Entwicklungsumgebung: VS2015 Ent


steffen_dec ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, solche Fehler findest Du am besten heraus wenn du den Debugger verwendest, siehe  [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Ich vermute dass in der CSV-Datei eine leere Zeile existiert...
12.07.2018 14:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
vbprogger vbprogger ist männlich
myCSharp.de-Poweruser/ Experte

avatar-1820.gif


Dabei seit: 16.01.2006
Beiträge: 1.694
Entwicklungsumgebung: Visual Studio 2012 Prof.
Herkunft: NRW/DE


vbprogger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ist doch klar. Bei Array fängt der Index immer bei 0 an, du allokierst ein Array der länge (lenght-1), d.h. der Index läuft con 0 bis (length-2), deine for-schleife läuft aber bis (length-1) und somit out of range.

Andererseits, Array ist veraltet, nimm List<> dann ist es einfacher, zB:

C#-Code:
List<Bahnhof> Trainstation = new List<Bahnhof>();
....
....
// neues Element hinzufügen:

Trainstation.Add(new Bahnhof(...,...));

// Bahnhof ansprechen:

... Trainstation[i].Id ...
... Trainstation[i].Name ...

Du brauchst also keine 2 Arrays.

Gruß

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von vbprogger am 12.07.2018 14:46.

12.07.2018 14:46 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.185
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Typisierte Arrays sind nicht veraltet, aber Listen sind moderner und einfacher.
Listen basieren auf Arrays.

Jedoch: untypisierte Arrays sind definitiv veraltet.
12.07.2018 14:49 Beiträge des Benutzers | zu Buddylist hinzufügen
Yeats Yeats ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.11.2005
Beiträge: 95
Entwicklungsumgebung: Visual Studio 2017 Community
Herkunft: Österreich


Yeats ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn du mit WPF arbeitest, sieh dir auch das MVVM Pattern und versuche dich daran zu halten. Es macht einiges einfacher --> Bessere Trennung deiner Logik von deiner UI --> leichteres schreiben von UnitTests
12.07.2018 15:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
lschwarz
myCSharp.de-Mitglied

Dabei seit: 12.07.2018
Beiträge: 6

Themenstarter Thema begonnen von lschwarz

lschwarz ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 16:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 23.09.2020 02:33