AnsiString beschneiden



  • Hallo!
    Ich habe einen AnsiString "test", dessen letzten 9 Stellen möchte ich entfernen. Wie lautet da der Befehl? Danke für Hilfe.
    Bsp: test="ABCD123456789" daraus soll test="ABCD" werden.
    ...und ja, ich habe schon in die Hilfe geschaut! Aber Trim halte ich für falsch! 😞



  • AnsiSting tWasDuWillst = test.SubString(test.Length()-9, test.Length());

    lg

    Oli



  • Achja, du koenntest auch test.Delete() verwenden; also bsp.:

    for(int i = test.Length(); i > test.Length()-9; i--)
    test.Delete(i);

    habs jetzt nicht getestet, aber so in etwa sollte es funzen.



  • String test="12345678901";
    
    test=test.SubString(1,test.Length()-9);
    


  • Dank für die schnelle Antwort! ...ich habe mich nun entschieden statt dem AnsiString ein Char zu verwenden...habe das mal versucht abzuändern, aber leider mit mäßigem Erfolg!
    [code]AnsiString(test)=AnsiString(test).SubString(1,AnsiString(test).Length()-9);[code]

    Nur leider kommt ein Char der Länge Null heraus! ...wieso?



  • Hallo

    ich habe mich nun entschieden statt dem AnsiString ein Char zu verwenden

    Und warum denn das das?
    Zum einen ist char nur genau ein Zeichen lang. Du meinst wohl char[] oder char*. Aber beibeiden Typen kannst du nicht so einfach einen Wert zuweisen, wie du es bei AnsiString kannst.
    Also nimm AnsiString.

    bis bald
    akari



  • Oli21 schrieb:

    Achja, du koenntest auch test.Delete() verwenden; also bsp.:

    for(int i = test.Length(); i > test.Length()-9; i--)
       test.Delete(i);
    

    habs jetzt nicht getestet, aber so in etwa sollte es funzen.

    das is völliger Blödsinn...
    nicht nur, dass test.Delete das i-te zeichen nicht löscht, sondern ne Kopie des Strings (ohne das i-te Zeichen) zurückgibt - also der String hier nicht mal geändert wird, nein

    hinzu kommt noch, dass wenn du die zeichen Löschen WÜRDEST (in der Schleife also zB test = test.Delete(i); schreiben würdest, dann würdest du WÄHREND DER SCHLEIFE test.Length() senken - damit sind sowohl i als auch test.Length() Schleifen Varianten (siehe http://de.wikipedia.org/wiki/Hoare-Kalk%C3%BCl) also ist i IMMER größer als test.Length()

    ergo würde das den String komplett löschen, i=0 wäre immer noch größer als -9 = test.Length()-9 und er würde versuchen, auf test[0] zuzugreifen, was bewirkt, dass das Programm umgehend abstürzt.
    ------------------------------------------------------------------
    Das

    Oli21 schrieb:

    AnsiSting tWasDuWillst = test.SubString(test.Length()-9,test.Length());

    ist auch blödsinn, weil dir das die letzten 9 stellen des strings ZURÜCKGIBT und nicht löscht... wenn der Ursprüngliche String weniger als 9 Stellen lang ist, hat das Ergebnis NOCH WENIGER mit der gestellten Frage zu tun, dann sinds n paar Zeichen vom Anfang des Strings, der in dem Fall aber komplett gelöscht werden soll

    Mann mann mann, wenn du keine Ahnung hast, dann verzapf nicht so n blödsinn, mit dem du anderen noch schadest
    ------------------------------------------------------------------

    so is richtig:

    Christian211 schrieb:

    String test="12345678901";
    test=test.SubString(1,test.Length()-9);
    

    und wenn du schon mit ner Schleife arbeiten willst, dann wenigstens so:

    for(int i = 0; i < 9; i++)
       test = test.Delete(test.Length());
    

    CU

    AlgoMan



  • ...ich habe mich nun entschieden statt dem AnsiString ein Char zu verwenden...

    Man muss das nicht verstehen?

    Da werden deine Probleme größer statt kleiner.

    strcpy und strlenght sind dann deine Freunde



  • Christian211 schrieb:

    strcpy und strlenght sind dann deine Freunde

    Bitte eher Strncpy verwenden... danke.


Anmelden zum Antworten