Text aus Memo ausschneiden



  • Moin Moin,

    wie kann ich denn eigentlich aus der Zahle 123456 nur die dritte stelle auslesen.

    Unter Unix gibt es dort den Befehl cut unter C kenne ich ihn nicht.

    Ich stelle mir das so vor:

    Zeile = 123456
    Jetzt soll die dritte Stelle also die 3 in eine Variable umgeleitet werden.

    Blue3



  • int v;
    v=Memo1->Lines->Strings[1][3];
    


  • THX a Lot



  • Zwerg23 schrieb:

    int v;
    v=Memo1->Lines->Strings[1][3];
    

    Auch wenn's nur ein Beispiel ist, aber bitte nicht so!

    Du kannst folgerndermaßen vorgehen:

    int zahl = StrToInt(Memo1->Lines->Strings[0][3]);
    


  • Auch wenn's nur ein Beispiel ist, aber bitte nicht so!

    Du kannst folgerndermaßen vorgehen:

    int zahl = StrToInt(Memo1->Lines->Strings[0][3]);
    

    [/quote]

    Warum nicht? Ich persönlich würde deine Lösung sogar schlimmer finden 😃

    Begründung:

    Memo1->Lines->Strings[0]
    

    is vom typ AnsiString, da sind wir uns ja wohl einig.

    Memo1->Lines->Strings[0][3]
    

    ist nun ein Zeichen dieses Strings, also vom Typ int (oder von mir aus auch vom Typ char)
    nun ist aber der Aufruf

    StrToInt(Memo1->Lines->Strings[0][3])
    

    sehr unpassend 😉 da es ja keinen String mehr gibt



  • Bei deinem Beispiel würde er aber auch nicht die gewünschte Zahl erhalten. Er würde den Ascii-Code für die Zahl "3" erhalten, will aber die Zahl 3 selbst erhalten.



  • Zwerg23 schrieb:

    int v;
    v=Memo1->Lines->Strings[1][3];
    

    [...]

    Memo1->Lines->Strings[0][3]
    

    ist nun ein Zeichen dieses Strings, also vom Typ int (oder von mir aus auch vom Typ char)

    Offenbar möchte blue3 nicht den ASCII-Wert des Zeichens wissen (was das Resultat deines Beispieles wäre), sondern den Wert der Ziffer.
    StrToInt funktioniert deshalb, weil intern ein temporärer AnsiString erzeugt wird. Und der Konstruktor von AnsiString ist so überladen, dass er auch char als Parameter akzeptiert.



  • Ok, is aber wohl auch dann nicht die feine Art, wenn es "unbedingt" der Zahlenwert selber sein muss, dann besser wohl so:

    int v;
    v=Memo1->Lines->Strings[0][3]-'0';
    

    Aber da fällt mir noch was viel besseres ein:

    int v;
    v=StrToInt(Memo1->Lines->Strings[0].SubString(3,1));
    


  • Ein Vorteil von StrToInt ist, dass eine Exception geworfen wird, falls es sich bei dem Zeichen nicht um eine Ziffer handelt, was andernfalls von Hand geprüft werden müsste (isdigit() o.ä.).

    Und was soll an der SubString-Variante besser sein?
    Falls das ironisch gemeint war (Smiley vergessen?), warum dann nicht so:

    v=StrToInt(Memo1->Lines->Strings[0].SubString(3,1)[1]);
    

    😉



  • SubString hätte den Vorteil, dass - wenn die Variable mal aus 2 Ziffern bestehen würde - eine Wandlung genauso einfach währe
    z.B. so:

    int v;
    v=StrToInt(Memo1->Lines->Strings[0].SubString(3,2));
    

Anmelden zum Antworten