Zeile aus memo suchen



  • Zeig doch erstmal deinen aktuellen Versuch mt SubString.
    Die AnsiString-Klasse verfügt übrigens noch über haufenweise anderer äusserst nützlicher Methoden.



  • Hi,

    also zuerst mal **sollte** AnsiString funktionieren (hab' hier keine IDE)...
    ok wenn ich Dich richtig verstanden habe, möchtest Du hinter dem A 3 Zeichen einfügen:

    int pos;
    
    for (int i = 1; i < Memo1->Lines->Count; i++)
    {
        pos = Memo1->Lines->Strings[i].AnsiPos("A");
        if (pos == 1)
            Memo1->Lines->Strings[i] = Memo1->Lines->Strings[i}.Insert("xXx", pos + 1);
    }
    

    Schau Dir unbedingt mal die Funktionen von AnsiString an. z.B. die oben verwendeten AnsiPos(), Insert(), aber auch SubString() oder Delete(). AnsiString ist eine sehr flexible und mächtige Klasse. Die mußt Du beherrschen.

    Falls es tatsächlich in TMemo nur Strings und keine AnsiStrings sein sollten (ich verwende immer TRichEdit, kann mehr), verwendest Du statt .AnsiPos() eben .Pos().

    Joe_M.



  • Vielen Dank für das Unterlaufen unserer pädagogischen Bemühungen.



  • Ups, sorry... aber sein Versuch mit den if's sah so erbarmungswürdig aus. 🙂

    Aber wenn es nicht gewünscht ist, werde ich es in Zukunft unterlassen, so direkte Hilfe zu geben.

    Joe_M.



  • Joe_M. schrieb:

    sein Versuch mit den if's sah so erbarmungswürdig aus

    Einen mehr oder weniger erbarmungswürdigen SubString-Versuch hättest du doch noch abwarten können. 😉



  • ne, ich hab ein Log von einem Programm, das z.B. so aussieht:

    HJ - jhlajsfhljsdhflf
    AB - jhjkhjahsfhlsfCDE123
    HJ - hasfhsfddfh

    aus diesem soll er die Zeilen suchen, die mit AB anfangen, und die nächsten drei Buchstaben die auf CDE in dieser Zeile folgen ausgeben.

    SubString hab ich nix gefunden. 😞



  • Also mit Joe's .Pos Einsatz und SubString solltest du es eigentlich hinkriegen.

    PS: SubString
    Die Methode SubString gibt den angegebenen Teilstring in einem AnsiString-Objekt zurück.

    AnsiString __fastcall SubString(int index, int count) const;

    Beschreibung

    Es wird ein neues AnsiString-Objekt zurückgegeben, das einen Teilstring des AnsiString-Objekts enthält. Der Teilstring enthält die in count angegebene Anzahl von Zeichen und beginnt an der mit index festgelegten Position.

    Das steht so in der Hilfe. 🙂
    Vielleicht solltest du die Hilfe installieren wenn du das nicht gefunden hast. :p



  • noch mal ganz deutlich zusammengefaßt: Such in der Online-Hilfe nach 'AnsiString' und schau Dir die Methoden von AnsiString an. Dort findest Du auch die von uns gezeigten Methoden.



  • Hi Jan!

    Das durchlaufen des Memos hast du ja scheinbar schon gefressen...

    Probier das doch nun mal so:
    String zeile = Memoxyz->Lines->Strings[i];

    Dann steht in der Variable "zeile" doch der Inhalt von Zeile i drin, oder?

    Dieses Objekt "zeile" hat dann doch eine Funktion, die da lautet "Pos()". Mit .Pos("CDE") kriegst du dann also raus, an welcher Stelle sich CDE befindet. Wenn sich CDE gar nicht darin befindet, gibt Pos 0 zurück!

    Und den Rest musst du dann eben mit .SubString() machen. Der erste Parameter von SubString gibt an, ab wann du die Zeichen haben möchtest, der zweite gibt an, wie viele Zeichen du haben willst.
    Dafür brauchst du wohl auch noch die Funktion .Length() - die nämlich gibt dir die Länge des Strings zurück!

    Nochmal ein kleiner Denkanstoss:

    A  B     -     j  h  j  k  h  j  a  h  s  f  h  l  s  f  C  D  E  1  2  3 
    1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
                                                             |       |      |
                                Gibt die Funktion Pos() zurück       |      |
                                                                     |---v--|
                                                                         |  |
                               Das hier musst du dir mit SubString rausholen|
                                                                            |
                                        Und das hier gibt dir Length() zurück
    

    So, und nun sieh dir mal deine Zeichenkette mal näher an und kombiniere das ganze mit den 3 Funktionen Pos() SubString() und Length()

    HTH!

    tschüss
    Robert



  • danke, ich glaub ich habs gerafft, echt gut erklärt 🙂


Anmelden zum Antworten