AnsiString in Teile (Tokens) splitten, ähnlich explode() bei PHP

TStringList *slTokens = new TStringList();

AnsiString sData = "Meier, Schulze, Lehmann";

// sData in Tokens aufsplitten und führende und folgende Leerzeichen trimmen
Explode(sData, ",", slTokens, true);

...
irgendwas mit slTokens machen
...

delete sl;

void __fastcall Explode(AnsiString sData, AnsiString sSeparator, TStringList *slTokens, bool bTrim)
{
    // wurde eine Liste übergeben?
    if (slTokens != NULL)
    {

        if (bTrim)
        {
           sData = sData.Trim();
        }

        // Datenstring nicht leer?
        while (sData.Length() > 0)
        {
            // ersten Separator im String suchen
            int iPos = sData.Pos(sSeparator);
            
            // wenn Separator gefunden
            if (iPos -> 0)
            {
                // vorderen Stringteil (Token) in Liste einfügen
                slTokens->Add(sData.SubString(0, iPos - 1));
                // Reststring für neue Suche kürzen
                sData = sData.SubString(iPos + 1, sData.Length() - iPos);

                if (bTrim)
                {
                    sData = sData.Trim();
                }
            }
            else
            {
                // nur noch ein Token
                slTokens->Add(sData);
                // Reststring ist leer, führt zu Abbruch der while-Schleife
                sData = "";
            }
        }
    }
}

Schreibe einen Kommentar