Benutzer mit den meisten Antworten
OutOfRange bei Substring aus Array-Element

Frage
-
hai,
als Newbie in C# & VC2010express übersehe ich vielleicht was.
Ich habe also ein Array mit String-Elementen. Aus jedem Element soll der mittlere Substring extrahiert werden. Code-Schnipsel:
string[] allFiles = fileExist.Split('|'); // z.B.: 130517_XY.mtgtl // Ziel: 0517_XY for (int i = 0; i < allFiles.Length; i++) { string xtr = allFiles[i].Substring(2, 7); dataGridView2.Rows.Add(xtr); comboBox1.Items.Add(xtr); }
Im VS-Editor ist noch alles in Ordnung, wenn ich aber das Debuggen starte, bekomme ich die Fehlermeldung"OutOfRange - startIndex darf nicht länger als die Länge der Zeichenfolge sein."
Für Trim, Remove usw. genauso. Über Replace funktioniert es. Was ist da los? Hilfe finde ich im Internet nicht; bei allen funktioniert's mit festen Zeichenketten, weswegen ich denke, dass es am Array-Element liegt.
Übrigens: Mit StreamBuilder klappt's auch nicht. Ich komme einfach nicht weiter. Weiß jemand Rat? Vielen Dank im Voraus.
- Bearbeitet Tom Lambert (Koopakiller)Moderator Montag, 3. Juni 2013 10:50 Code als Codeblock
Antworten
-
Hi,
so wie es aussieht hast Du einen "Teilstring" dessen Länge kleiner 3 ist. Eventuell hast Du ein "||" in Deiner fileExist variable. Falls dem so ist, kannst Du die überladene Split() Methode aufrufen, die als 2. Parameter eine Enum des Typs StringSplitOptions entgegennimmt.
string[] allFiles = fileExist.Split(new char[] { ('|') }, StringSplitOptions.RemoveEmptyEntries);
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert lypo Montag, 3. Juni 2013 12:49
-
Hallo zusammen, Heslacher hat dir den wahrscheinlichsten Fehler ja schon genannt. Aber hier nochmal etwas zur Fehlerfindung:
Wenn VS die Ausführung deines Programms unterbricht, dann springt es zu der Zeile, die den Fehler verursacht. Dann kannst du auf fast alle Felder und Eigenschaften zeigen um deren Werte angezeigt zu bekommen. Merke die i bzw. docke es an (Die kleine Pinnadel anklicken). Dann gehst du auf dein Array und suchst dort das Entsprechende Element heraus (mit dem [+] aufklappen). Dann bekommst du angezeigt, welchen Inhalt die einzelnen Texte haben. Das kannst du dann mit fileExist vergleichen und versuichen den Fehler zu finden.
PS: Benutze bitte Code-Blöcke.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Bearbeitet Tom Lambert (Koopakiller)Moderator Montag, 3. Juni 2013 10:50
- Als Antwort markiert lypo Montag, 3. Juni 2013 12:49
Alle Antworten
-
Hi,
so wie es aussieht hast Du einen "Teilstring" dessen Länge kleiner 3 ist. Eventuell hast Du ein "||" in Deiner fileExist variable. Falls dem so ist, kannst Du die überladene Split() Methode aufrufen, die als 2. Parameter eine Enum des Typs StringSplitOptions entgegennimmt.
string[] allFiles = fileExist.Split(new char[] { ('|') }, StringSplitOptions.RemoveEmptyEntries);
Hannes
If you have got questions about this, just ask.
In a perfect world,
users would never enter data in the wrong form,
files they choose to open would always exist
and code would never have bugs.
C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/- Als Antwort markiert lypo Montag, 3. Juni 2013 12:49
-
Hallo zusammen, Heslacher hat dir den wahrscheinlichsten Fehler ja schon genannt. Aber hier nochmal etwas zur Fehlerfindung:
Wenn VS die Ausführung deines Programms unterbricht, dann springt es zu der Zeile, die den Fehler verursacht. Dann kannst du auf fast alle Felder und Eigenschaften zeigen um deren Werte angezeigt zu bekommen. Merke die i bzw. docke es an (Die kleine Pinnadel anklicken). Dann gehst du auf dein Array und suchst dort das Entsprechende Element heraus (mit dem [+] aufklappen). Dann bekommst du angezeigt, welchen Inhalt die einzelnen Texte haben. Das kannst du dann mit fileExist vergleichen und versuichen den Fehler zu finden.
PS: Benutze bitte Code-Blöcke.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Bearbeitet Tom Lambert (Koopakiller)Moderator Montag, 3. Juni 2013 10:50
- Als Antwort markiert lypo Montag, 3. Juni 2013 12:49
-
Danke an euch Beide! Das hat geholfen. Mit etwas überlegen hätte ich selbst darauf kommen müssen:
Replace funktionierte ja; wo nichts ist, kann nichts ersetzt werden - kein Fehler. Logisch.
Manchmal hat man Kartoffeln auf den Augen. Tatsächlich ist das letzte Array-Element leer, was der Test mit IsNullOrEmpty zeigte. Allerdings ist mir schleierhaft, woher das kommt. Egal - is'n anderes Thema. Der Tipp von Heslacher (bedankt!) wird mir wohl noch häufiger weiter helfen.
Die Fehlerzeile wurde mir auch angezeigt, Koopakiller. Auch bedankt! Noch verstehe ich es nicht vollständig; das kommt sicherlich noch. Ich bin nur manchmal zu dumm... :-))
Also: Problem gelöst, Thread kann geschlossen und als Tipp für andere gespeichert werden. Es gibt dazu tatsächlich wenig bis nichts im Netz.
'nen schönen Tach noch...
...lypô
-
Hallo lypô,
Schön dass es geklappt hat! Ich möchte dich nur noch bitten, jene Postings als hilfreich und/oder als Antwort zu markieren, die dir bei der Lösung des Problems geholfen haben. Danke.
Gruß
Marcel- Als Antwort markiert lypo Montag, 3. Juni 2013 12:49
- Tag als Antwort aufgehoben Marcel RomaModerator Montag, 3. Juni 2013 14:03