C# String in Char-Array einlesen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich versuche gerade ein Spiel zu programmieren.
Dazu verwende ich eine .dat-Datei, die eingelesen wird:

1. Zeile: Anzahl der Spalten
2. Zeile: Anzahl der Zeilen
ab. 3. Zeile, Zeilen des Spiels

Bsp:
5
5
#####
#####
#####
#####
#####

Jetzt möchte ich ein Array haben, bspw. 'line'.
in line[1] möchte ich als Array die 5 Zeichen der ersten Spielereihe.
in line[2] möchte ich als Array die 5 Zeichen der zweiten Spielereihe.
...
...
...

Folgendes habe ich dazu bereits umgesetzt:
Code:
        string dateipfad = @"/Users/.../Desktop/maze.dat";
        string[] line = File.ReadAllLines(dateipfad);
        
        int spalte = Int32.Parse(line[0]); // 19
        int zeile = Int32.Parse(line[1]); // 13
        
        Console.WriteLine("Das Dokument hat {0} Spalten sowie {1} Zeilen!", spalte, zeile);
        
        char[][] gameLines = new char[spalte][zeile]; 
        
        for (int i = 2; i < zeile; i++) {
            gameLines[i][] = line[i].ToCharArray();
        }

Allerdings scheint das irgendwie mit den Arrays nicht zu funktionieren.
Kann mir einer einen Tipp geben, was ich da falsch mache, aktuell?

VG, David
 
Bin gerade nur am Handy, aber warum verwendest du in der Schleife bei gameLines den selben Index i? Damit füllst du das Array ja erst ab position 2 statt ab 0. Des weiteren gibt man beim Anlegen eines 2d-Arrays erst die Zeilen an, dann die Spalten - eigentlich ist es egal, solange du es dann wenigstens konsistent verwendest, aber das ist in der Schleife ja nicht der Fall.

Ansonsten: "Allerdings scheint mir das nicht zu funktionieren" ist keine Fehlerbeschreibung.
 
Zuletzt bearbeitet:
Habe den index jetzt mit 'i-2' um zwei minimiert, sodass er bei 0 startet.

Ich bekomme die folgende Fehlermeldung:
'game.cs(20,46): error CS0029:
Cannot implicitly convert type `char' to `char[][]''
Da scheint wohl was mit den Arrays nicht zu stimmen -
ich kann aber nicht nachvollziehen, was genau da nicht stimmt.
Ich habe mir jetzt erhofft, dass von euch einer direkt sieht,
wo ich hier etwas falsch mache.

Muss ich nur ein Array deklarieren, um mein Vorhaben zu realisieren?
 
Code:
var gameLines = new char[rowCount][];

for (int i = 0; i < rowCount; i++)
{
    gameLines[i] = lines[i+2].ToCharArray();
}

Folgendes ist hier zu beachten:

  • Die Anzahl Spalten braucht man hier gar nicht, wenn das ein Constraint ist, der geprüft werden muss, dann musst du das noch tun.
  • Falls die Datei weniger Zeilen enthält, als oben in der Datei angegeben, dann kracht es. Muss bei Bedarf also auch getestet werden.

Kenne mich in C# nicht besonders aus, aber es scheint mir so, als unterscheidet die Sprache syntaktisch zwischen multidimensionalen Arrays und verschachtelten Arrays (also Arrays von Arrays). Hier wird die letztgenannte Variante benutzt. Wenn du stattdessen lieber ein "echtes" 2D-Array möchtest, was aufgrund der festen Anzahl an Spalten in deinem Beispiel gehen würde, dann müsstest du pro Zeile wohl die einzelnen Spalten manuell setzen.
 
Zuletzt bearbeitet:
Zurück
Oben