Explode?!



  • Hi,
    ich weis nich ob ihr in PHP programmiert oder mal programmiert habt, aufjedenfall gibt es in PHP eine funktion namens explode, so wird die angewendet: explode("trennzeichen",$variable");

    Dadurch wird ein array erstellt, immer ein neuer eintrag wenn trennzeichen kommt.

    So ne funktion gibt es in C++ ja nich, und da wollt ich ma fragen ob ihr wisst wie ich das am besten realisieren soll!

    Habe mal nen bischen rumgesurft und folgendes gefunden:

    map <int,string> explode( const string& separator, const string& data )
    {
        map <int,string> values;
    
        if (separator.empty() || data.empty())
            return values;
        int counter = 0;
        while (true)
        {
            std::string::size_type pos;
            pos = data.find(seperator, 0);
            if (pos == std::string::npos)
            {
                values[counter++] = data;
                break;
            }
            values[counter++] = data.substr(0, (pos - 1));
            data = data.substr((pos + seperator.length()-1));
        }
        return values;
    }
    

    Das funktioniert nur leider nich ganz 😕
    [C++ Error] Unit1.cpp(18): E2141 Declaration syntax error

    Mfg
    Bennet



  • Das kannst du ganz einfach mit ner TStringList lösen.
    Du weist der Eigenschaft "Delimiter" das Trennzeichen zu und den zu teilenden Text der Eigenschaft "DelimitedText".


  • Mod

    Hallo

    auch mit DynamicArray waere soetwas zu loesen

    MfG
    Klaus



  • Danke!
    Ich werde es mal ausprobieren!

    Mfg
    Bennet



  • Hmmm, kann man irgendwie einstellen, das es z.B. nur 4 mal oder so getrennt wird und dann wollt ich noch fragen warum es nun so einen komischen fehler gibt, ich last den Delimiter auf ; setzen, aber der Text wird durch ein Leerzeichen getrennt, aber ich habe überprüft, der delimiter wird auf ; gesetzt, woran liegt denn das nun?

    Mfg
    Bennet



  • Weis niemand etwas?
    Habe jetzt ne Stunde rumprobiert geht aber irgendwie leider nich 😕



  • habe jetzt ma ne unfehlbare prüfung gemacht:
    if(detext->Delimiter == trenner[1])
    {
    detext->DelimitedText = dertext;
    Form1->Label1->Caption = detext->Delimiter;
    }

    Er führt das DelimitedText aus aber anstadt wie in trenner angegeben ; ein Leerzeichen als Delimiter aus, am schluss wird auch auf dem Label ; ausgegeben trotzdem trennt er den Text immer durch ein Leerzeichen, wo liegt der Fehler?

    mfg
    Bennet



  • ich verstehe nicht, was du da für ein Problem damit hast.
    ich schreibe jetzt auch gerade so ein "parser" und funzt einwandfrei

    TStringList* l = new TStringList();
    l->Delimiter = ';';
    l->DelimitedText = "Feld1;Feld2;Feld3";

    danach steht in
    l->Strings[0] ==> Feld1
    l->Strings[1] ==> Feld2
    l->Strings[3] ==> Feld3



  • Ja so sollte es bei mir eigentlich auch sein, aber er trennt es irgendwie nicht durch ; sondern durch ein Leerzeichen obwohl ich Delimiter gesetzt habe!

    Is das ein Bug vom BCB 6?

    mfg
    Bennet



  • So habe nocheinmal geguckt, wenn der Text = Feld1;Feld2;Feld3 ist, dann trennt der das auch richtig aber sobald der Text ein Leerzeichen enthält teil er es durch die leerzeichen und durch die ;


Anmelden zum Antworten