ListBox mit gemischtem Text auf Memo übertragen (und sortieren)



  • Hallo Leutz...

    Habe folgendes Problem:

    Ich hab ne ListBox mit gemischtem Text (zB "test 12345" oder "test1 56789")
    und diesen inhalt möchte ich auf ein Memo feld übertragen ... ABER halt ! Ich will nur die Zahlen haben.

    Habe schon einwenig das Forum durchsucht und bin auf einen Quelltext gestossen in dem es möglich ist nur Zahlen auf einem Memo Feld zu erlauben. Das geht aber nur wenn man manuell was einträgt.

    Wie kann ich die Zahlen aus dem Gemischten Text filtern ? 😕



  • Mir fällt im Moment nur ein:
    Zeichen für Zeichen durchgehen und auf mit 0...9 vergleichen. Da der Text in einer Listbox vom Typ AnsiString ist, geht das eigentlich recht einfach.



  • maam schrieb:

    Da der Text in einer Listbox vom Typ AnsiString ist [...]

    ... kann man sich zum Zerlegen der Items auch der bequemen AnsiString-Methoden bedienen.



  • Okay ich brauche eine Schleife um meinen Text abzufragen ! *klar* aber dann wird es auch schon kompliziert 😞

    Ich habe mal einen Blick in die BCB hilfe geworfen also da steht was von:

    AnsiCompare Die Methode AnsiCompare vergleicht das AnsiString-Objekt mit einem angegebenen String und unterscheidet dabei zwischen Groß- und Kleinschreibung. Rückgabewerte sind entsprechend der Strings S1 und S2:
    S1 > S2 > 0
    S1 < S2 < 0
    S1 = S2 = 0

    AnsiString aVar = "Test";
    AnsiString bVar = "test";
    AnsiString cVar = IntToStr( aVar.AnsiCompare( bVar ) );
    ShowMessage (cVar);
    

    ...

    naja und weiterunten steht auch was von

    Die Methode Delete löscht vom angegebenen Index die angegebene Anzahl von Zeichen aus dem String.

    AnsiString aVar = "Dies ist ein Testtext!";
    aVar.Delete(1 ,13);
    

    ...

    Kann mir jemand einen kleinen Denkansatz geben wie die Schlefe aussehen könnte ... 😃



  • Kommt drauf an, was Du willst. Willst Du die 1 aus Test1 da lassen oder auch weg haben?
    Wenn Du nur die reinen Zahlenwerte haben willst (also Test1 komplett gelöscht werden soll) und immer ein Leerzeichen zwischen den einzelnen Abschnitten ist und sich immer nur 2 Daten in einem Eintrag befinden ist sehr einfach:

    // Dein String zb. AnsiString asTest
    int pos;
    pos = asTest.AnsiPos(" ");
    if (pos)
      asTest = asTest.Delete(1, pos)
    asTest = AnsiString(asTest.ToIntDef(-9999));
    

    Wenn der zweite Wert eine Zahl ist, befindet sich dieser in zum Schluß in asTest, wenn es keiner ist, befindet sich "-9999" in asTest.

    Wenn das nicht das gewünschte ist, das Problem bitte genauer beschreiben.



  • Hallo,

    Du kannst die Schleife über die Länge deines Strings machen und dann die einzelnen Zeichen abfragen.
    z.Bsp. so:

    AnsiString t1(""), t2("123ad345ff");
      for( int i=1; i<=t2.Length(); ++i) if( isdigit(t2[i]) ) t1+=t2[i];
    

    Dieses hier würde als Ergebnis dann in t1 "123345" liefern. Wenn du es anders haben wilsst musst du uns schon mehr verraten. Ach so es gibt neben isdigit (ist der char ein Zahlzeichen von 0-9) auch noch andere Prüffunktionen wie isalpha, isspace, isalnum etc.

    Ciao



  • Jo danke Braustein genau das habe ich gebraucht !!!

    👍


Anmelden zum Antworten