Benutzer mit den meisten Antworten
Substring(IndexOf()) unklares Verhalten

Frage
-
Hallo!
Wahrscheinlich ist es nur ein Denkfehler meinerseits.
Ich hoffe ihr könnt mir hier schnell und schmerzlos nen Tip in die Richtige Richtung geben ^^.Konkret geht es um den Code Block:
line = line.Substring((line.IndexOf(';')+1));
Das ganze Programm (kann man eigentlich irgendwie Spoiler benützen? Habs mit nem HTML Code probiert hat aber nicht funktioniert)
using System; using System.IO; namespace AZ_AB_Matrix_Console { class Program { static void Main(string[] args) { float[,,] segel_Matrix = new float[6, 10, 12]; StreamReader sr = new StreamReader(@"C:\Users\felix\Desktop\AZ_AB_Matrix_sortiert_mit_0_aufgefuelt.csv"); string line; int ctr = 0; int ctr_ = 0; int ctr__ = 0; while ((line = sr.ReadLine()) != null) { if (line[0] == '#') { ctr++; ctr_ = 0; } else { ctr_++; ctr__ = 0; while (line.Length > 1) { segel_Matrix[ctr, ctr_, ctr__] = Convert.ToSingle(line.Substring(0, line.IndexOf(';'))); line = line.Substring((line.IndexOf(';')+1)); } } } Console.Write(segel_Matrix); } } }
Aus einem mir unergründlichen Grund kommt immer direkt beim ersten lauf des Codes an der konkreten Stelle zu einer System.IndexOutOfRangeException Exception. Im Direktfenster von VisualStudio (Community 2017 15.5.6) funktioniert der Code Problemlos.
Hier die Datein welche eingelesen werden solten:
Danke schonmal für eure Hilfe!
Felix
- Bearbeitet Chaftalie Sonntag, 4. Februar 2018 17:25
Antworten
-
Der Fehler scheint dann aufzutreten, wenn Du an die Kapazitätsgrenze der mittleren Dimension Deines segel_Matrix arrays stösst. Versuch doch mal die Dimension um einen Zähler zu erhöhen und schau, was dabei rauskommt! Also
float[,,] segel_Matrix = new float[6, 11, 12];
wizend- Als Antwort vorgeschlagen Florian Haupt Dienstag, 6. Februar 2018 08:38
- Als Antwort markiert Chaftalie Donnerstag, 15. Februar 2018 08:00
Alle Antworten
-
Der Fehler scheint dann aufzutreten, wenn Du an die Kapazitätsgrenze der mittleren Dimension Deines segel_Matrix arrays stösst. Versuch doch mal die Dimension um einen Zähler zu erhöhen und schau, was dabei rauskommt! Also
float[,,] segel_Matrix = new float[6, 11, 12];
wizend- Als Antwort vorgeschlagen Florian Haupt Dienstag, 6. Februar 2018 08:38
- Als Antwort markiert Chaftalie Donnerstag, 15. Februar 2018 08:00
-
Stimmt da hat sich bei mir ein Fehler unterschlichen (2 und dritte dimension vertauscht):
float[,,] segel_Matrix = new float[6, 12, 11];
Auch muss ich ctr mit -1 und nicht mit 0 initializieren, damit ich mit 0 und nicht mit 1 Anfange.
ctr_ habe ich auch an der Falschen stelle um 1 Raufgezählt. (nach der while Schleife nicht davor.)
Der Code Funktioniert jetzt soweit. Danke dafür!
Was jedoch noch immer komisch ist (von der VS Seite), ist dass die Fehlermeldung erst eine Zeile später kommt. wenn ich das Array mit um einiges zu kleinen Werten initializiere dann kommt der Fehler nämlich schon in der richtigen Zeile.
Aber das ist schon wieder Off Topic ^^.
Danke für die zügige Antwort!
lerchner Felix
- Bearbeitet Chaftalie Sonntag, 4. Februar 2018 20:01