Problem mit String->Trim



  • also die Trim methode diehnt ja dazu aus einem String bestimmte zeichen(folgen) herraus zuschneiden

    nur irgendwie klappt das bei mir nur halb...

    also ich habe folgenden String

    B><FONT color=red>1600</FONT></B>

    und bearbeite diesen mit folgendem code:

    String ^weg ="<;>;B;FONT;color;=;/;red;green";				 
    bp = bp->Trim(weg->ToCharArray());	
    bp = bp->Trim();
    this->richTextBox1->Text=bp;
    

    und bekomme dieses hier
    color=red>1600

    dabei will ich doch nur die Zahl haben... kann mir das jemand erklären warum weshalb die restlichen zeichen nicht auch weggeschnitten werden?



  • tko schrieb:

    also die Trim methode diehnt ja dazu aus einem String bestimmte zeichen(folgen) herraus zuschneiden

    Nein. Nicht "herraus-", sondern einfach links und rechts "abzuschneiden"!

    Dein Code ist etwas unverständlich, weil unklar ist was "bp" sein soll.... auch ist es mir unklar was Du mit "Trim(weg->ToCharArray());" vorhattest? Vermutlich macht es nicht das, was Du vermutet hast.... vermuten ist sowieso immer schlecht... Du solltest Die Doku lesen!



  • bp ist der ausganzsstring also B><FONT color=red>1600</FONT></B>

    hier schneide ich also alle zeichen des Weg, Strings aus dem bp String:

    bp = bp->Trim(weg->ToCharArray());
    

    und mit bp->Trim(), enferne ich alle leerzeichen (war mehr ein test)

    und ja ist mir bekannt des "herraus"-schneiden evtl die falsche wortwahl war :), herrausschneiden würde ich wohl eher mit ->SubString machen.
    Naja wie auch immer das Trimen funktioniiert ja aber halt nur halb..., und ich kann mir nicht erklären warum nicht.

    laut http://msdn.microsoft.com/de-de/library/d4tt83f9(VS.80).aspx
    müsste das so funktionieren...



  • tko schrieb:

    und mit bp->Trim(), enferne ich alle leerzeichen (war mehr ein test)

    Nein! SOndern nur links und rechts!

    Verwende "Replace"!



  • na definiere mal links und rechts...

    wie weit ist links und wieweit ist rechts?

    das problem mit replace ist ja das ich immer nur ein zeichen bzw eine zeichenfolge entfernen kann. mit trim hat man ja den vorteil gleich mehreres auf einmal raus zuhauen



  • trim entfernt von links alle Zeichen, die in deiner liste sind, bis es auf das erste Zeichen stöst, dass nicht in deiner Liste ist. In deiner Liste ist kein Leerzeichen, also hört es bei " color=red>1600</FONT></B>" auf. Dann macht es das selbe von rechts, wo dann die 0 nicht in deiner Liste ist.

    Was totaler unsinn in deinem Beispiel ist, ist dass das Semikolon, das 'e' und einige weitere Zeichen mehrmals bei den zu entfernenden Zeichen vorkommen.

    Wenn du nur die Zahl willst, wie wäre es dann ganz einfach mit einem regulären Ausdruck?



  • Hallo tko,

    wenn die Zahl immer an der gleichen Position steht, könneste Du es so machen...

    String^ _weg = "B><FONT color=red>1600</FONT></B>";
    weg = _weg->Remove(0,18);
    richTextBox1->Text = _weg->Remove(4,11);
    

    Wenn nicht, was ich mal glaube, solltest oder musst Du den String mit Split zerlegen und die Zeichen überprüfen.

    Gruß, Doug_HH



  • okay lag an dem leerzeichen, nun klappts danke.

    wenn die zahl immer an der selben stelle stehen würde, stimmt dan würde ich es anders machen 🙂



  • hat jemand evtl noch eine idee wie ich immer "alle zeichen" ausser zahlen aus dem string entfernen kann?



  • a) Du bastelst eine Funktion, die den String durchläuft und nur das übrig lässt, was laut Char::IsDitigt eine Ziffer ist.

    b) Du machst das, was ich von anfang an vorgeschlagen habe

    richTextBox1->Text = System::Text::RegularExpressions::Regex::Match(bp, L"\\d+")->Value;
    

    mit nem

    using namespace System::Text::RegularExpressions;
    

    eventuell etwas schöner.



  • ah schön 🙂

    danke


Anmelden zum Antworten