Autor Beitrag
redline2008
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 05.09.15 01:02 
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:
ausblenden volle Höhe 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');
      //Spalten- und Zeilenanzahl aus File auslesen
      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]); //Hier kommt der Fehler
  int portionen = eins.Items(zwei);
  Labyrinth drei = new Labyrinth(zwei, portionen);
  System.Windows.Forms.Application.Run(drei);
}
}


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.
ausblenden 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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