Zeilenumbruch in for-Schleife



  • Hallo,

    folgendes Problem:
    Ich habe einen String, der zu Beginn sowohl einen Zeilenumbruch als auch Kommazeichen enthält. Diesen Zeilenumbruch versuche ich zunächst raus zu nehmen und möchte dann über eine for-Schleife steuern, dass nach jedem 3. Komma ein Zeilenumbruch eingefügt wird.
    Leider stehe ich etwas auf dem Schlauch, d.h. entweder erhalte ich momentan nach jedem Komma einen Zeilenumbruch oder der Zeilenumbruch wird nicht nach dem Komma gesetzt.

    Ich hoffe, das Problem ist verständlich und jemand kann mir helfen! Danke euch!

    Hier mal mein Code:

    if (pos.Nummernfolge != null)
                    {
                        sSnr = Regex.Replace(pos.Nummernfolge, "\r\n", ", ");
                        MatchCollection matches = Regex.Matches(pos.Nummernfolge, Regex.Escape(","));
                        int anz = 0;
                        int y;
                        foreach (Match m in matches)
                        {
                            anz++;
                            y = anz % 3;
                            if (y == 0)
                            {
                                pos.Nummernfolge = pos.Nummernfolge.Insert(m.Index, Environment.NewLine);
                            }
                        }
                    }
                    else
                        pos.Nummernfolge = "";
    

  • Mod

    Beschreib mal, was anz in deinem Plan machen soll und dann guck mal in deinem Code, ob es das auch wirklich leistet.



  • Irgendwie scheine ich auf dem Schlauch zu stehen?!
    anz soll immer um 1 erhöht werden und bei jedem dritten mal, wenn modulo = 0 ergibt, soll ein Zeilenumbruch eingefügt werden.


  • Mod

    Entschuldigung. Ich hatte zu schnell gelesen und deine etwas ungewöhnliche Schleife (die ich so nicht gemacht hätte), in der Eile fälschlicherweise als falsch erkannt.



  • Wenn du einen Zeilenumbruch einfügst, passen die folgenden Indizes m.Index nicht mehr (entweder rückwärts iterieren oder einen zusätzlichen Zähler dafür verwenden).



  • Ein naiver Ansatz den ich wählen würde wäre ja was in der Richtung:

    static string Modify(string value)
            {
                string result = string.Empty;
                value = value.Replace(Environment.NewLine, ",");
    
                string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    
                for(int i = 0; i < parts.Length; i++)
                {
                    result += $"{parts[i]},";
    
                    if((i+1)%3 == 0)
                        result += Environment.NewLine;
                }
    
                return result;
            }
    

    // EDIT:
    Auf Basis deines Codes wäre eine funktionierende Variante z.B. hier. Allerdings halte ich meine da eher für zu bevorzugen.



  • @Jayda:
    Ist dir klar, dass pos.Nummernfolge durch den Aufruf von Regex.Replace nicht verändert wird? Das Ergebnis steht in sSnr, aber damit machst du nichts mehr.


Anmelden zum Antworten