Zeilenumbruch durch String " , " ersetzen



  • Hallo, ich versuche grad einen String, der eine menge Worte enthält so zu verändern, dass bei einem Zeileinumbruch die Zeichenkette Leerzeiche Komma Leerzeichen gesetzt wird.

    Der aktuelle Versuch sieht wie folgt aus:

    AnsiString TForm1::setzekomma(AnsiString Liste)
    {
      AnsiString after;
      for(int i = 0; i < Liste.Length(); i++)
      {
         if(Liste.SubString(i, 1) != '\n')
         {
            after += Liste.SubString(i, 1);
         }
         else {
            after.Delete(i, 1);
            after += ", ";
         }
    
      }
      after = after.Delete(1, 1);
    
      return after;
    };
    

    Soweit funktioniert der Code, jedoch wird vor dem Komma kein Leerzeichen gesetzt. Kann mir da jemand sagen woran das liegen könnte, bzw. wie ich dort ein Leerzeichen hinbekomme?

    Setze ich bei

    after += " , ";
    

    Zerstört er den String bzw. setzt wieder einen Zeilenumbruch.



  • Für solche Ersetzungsgeschichten verwende ich meißt StringReplace.

    AnsiString SetzeKomma(AnsiString Liste) {
    
      return StringReplace(Liste, "\r\n", " , ", TReplaceFlags() << rfReplaceAll);
    }
    

    und zu deinen Problem du ersetzt nur den '\n' also den "Carriage return" (CR)
    unter Windows musst du auch den '\r' "Line Feed" (LF) beachten.



  • Man könnte auch statt '\n' besser "\n" verwenden.



  • Ok, danke. 🙂

    An das simple StringReplace() hatte ich garnicht gedacht.


Anmelden zum Antworten