Entwickler-Ecke
IO, XML und Registry - .dat einlesen Probleme
redline2008 - Sa 05.09.15 01:02
Titel: .dat einlesen Probleme
Hallo zusammen,
habe etwas Probleme beim einlesen einer .dat Datei in einen Code.
Es kommt beim Kompilieren ein IndexOutofRangeException Fehler. Sieht vielleicht jemand den Fehler? Muss ich irgendwo den Pfad und Dateinamen hinterlegen? Falls ja in welcher Form und wo?
Die maze.dat Datei habe ich im Debug Ordner des Projekts. /Nutze MS VisualStudio
Hier Codeanfang und Ende:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| using System.Windows.Forms; using System.Windows; using System.Data; using System; using System.Collections.Generic; using System.Windows.Media; using System.Windows.Controls; using System.Windows.Shapes;
using System.IO;
public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } }
public class Import { public DataTable fillDataTableFromFile(string path) { DataTable dTable = new DataTable(); int Zeilenanzahl, Spaltenanzahl; int Zeile, Spalte; if (File.Exists(path)) { string fileText = File.ReadAllText(path);
string[] fileLines = fileText.Split('\n'); Zeilenanzahl = Int32.Parse(Convert.ToString(fileLines[1])); Spaltenanzahl = Int32.Parse(Convert.ToString(fileLines[0])); .... .....
[STAThreadAttribute()] static void Main(string[] args) { DataTable zwei = new DataTable(); Import eins = new Import(); zwei = eins.fillDataTableFromFile(args[0]); int portionen = eins.Items(zwei); Labyrinth drei = new Labyrinth(zwei, portionen); System.Windows.Forms.Application.Run(drei); } } |
Moderiert von Th69: C#-Tags hinzugefügt
Ralf Jansen - Sa 05.09.15 01:11
Zitat: |
Es kommt beim Kompilieren ein IndexOutofRangeException Fehler |
Wenn du eine Exception bekommst dann zur Laufzeit des Programms nicht beim kompilieren.
Du greifst in der Main Methode auf args zu. args sind die Kommandozeilen Parameter die du an das Programm übergibst. args[0] wäre der erste Parameter. Wenn du keine übergibst gibt es kein args[0] und einfach drauf zugreifen greift ins Leere was in einer IndexOutofRange Exception resultiert da es den Index 0 nicht gibt.
redline2008 - Sa 05.09.15 01:54
OK, aber ich hatte ja noch gar keine möglichkeit was einzugeben. Deshalb hatte ich vermutet das die datei nicht geladen wird und der fehler deswegen kommt. ist mit dem Einbinden der Datei alles in Ordnung? Mir kommt es etwas komisch vor das ich nirgendwo den Dateinamen und Pfad angeben kann/soll.
Th69 - Sa 05.09.15 08:46
Hallo und :welcome:
Den Dateinamen gibst du in der Konsole als Parameter hinter dem Programmnamen an (mit Leerzeichen getrennt), z.B.
Quelltext
1:
| programm.exe datei.dat |
Und zum Debuggen im Visual Studio unter den Projekteinstellungen.
Da du aber nicht davon ausgehen kannst, daß immer eine Dateiname vorliegt, solltest du die Größe des übergebenen Arrays abfragen:
C#-Quelltext
1: 2: 3: 4:
| if (args.Length > 0) { string name = args[0]; } |
PS: Die Variablen solltest du besser benennen, anstatt durchzunummerieren. Wenn dir kein besonderer Name einfällt dafür, dann wenigstens so wie die Klasse heißt, z.B.
dataTable, import, labyrinth.
redline2008 - Sa 05.09.15 19:15
Super! Funktioniert.
Das war der Entscheidende Hinweis. Habe das mit in der Konsole direkt einzugeben in den Büchern die ich habe nicht gefunden oder ich habe nach dem falschen Hinweis gesucht.
Vielen Dank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!