none
OutOfRange bei Substring aus Array-Element RRS feed

  • 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.


    Montag, 3. Juni 2013 10:15

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
    Montag, 3. Juni 2013 10:31
  • 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.


    Montag, 3. Juni 2013 10:49
    Moderator

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
    Montag, 3. Juni 2013 10:31
  • 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.


    Montag, 3. Juni 2013 10:49
    Moderator
  • 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ô

    Montag, 3. Juni 2013 11:11
  • 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
    Montag, 3. Juni 2013 11:54
    Moderator
  • Ah - jetzt verstehe ich auch, was es mit diesem "Antwort markieren" auf sich hat!

    Alles geschehen.

    Und nochmals Danke!

    ...lypô

    Montag, 3. Juni 2013 12:52