CString rückwärst ab Stelle durchsuchen



  • Ich muss Teile eines Codes (in einem CString gespeichert) parsen. Wenn ich auf eine Fkt des Typs "CreateFoo(x)" stoße will ich wissen, welchen Wert x hat. Dazu müsste ich ds letzte Vorkommen von "set x=" vor dem CreateFoo finden.

    Wie kann ich jetzt den String rückwärts durchsuchen, dabei aber von dem Anfang von "create" Starten?

    Welche andre Möglichkeit habe ich (es soll schnell sein, da es sehr häufig gesucht werden muss)?



  • CString ist kein C++.


  • Administrator

    CString ist eine Klasse aus der MFC. Am einfachsten schaust du aber schnell mal in der Dokumentation nach, dort steht alles drin:
    http://msdn.microsoft.com/en-us/library/5bzxfsea.aspx

    Allerdings frage ich mich, ob dein Vorgehen nicht ein wenig verkehrt ist? Du wirst ja wohl "set x=" beim Parsen schon vorher gesehen haben. Wieso speicherst du nicht in einer Map den Wert von x ab? Dann kannst du den Wert viel schneller und unkomplizierter wieder abrufen.

    Grüssli



  • ich muss den Code nicht vollständig parsen, sondern nur einige Stellen. Und meist sind die Funktionen mit Konstanten. Auch die Variablen sind Konstanten, die vorher belegt wurden.
    Aber hast Recht.

    2 Fragen:

    1. Wie verwende ich die map? Brauch ja nur ne Zuordnung: Variable->Aktueller Wert. Und Suche nach Variable sowie dass er statt hinzuzufügen bei existenz den Wert nur ändert.

    2. Da der Code zeilenweise aufgebaut ist (\r als Trennzeichen) würde ich den auch Zeilenweise parsen. Da CString keine "Suche bis" unterstützt wäre meine Methode:
      nächstes \r bestimmen, SetLength auf Zeichen vor \r -->\r wird das 00-zeichen und ich kann Gucken, ob in dieser Zeile was für mich wichtiges ist. Danach stelle ich das \r wieder her und setze die Länge auf die alte Länge. Ich will damit vermeiden unnötig Speicher und Laufzeit zu verschwenden, beim Versuch ein Array zu erstellen oder jedesmal erst nen CString zu setzen.
      Alternativ wäre: Cstring mit max. Zeilenlänge erstellen und da jeweils eine Zeile reinzukopieren, spart die Memory (re)allocationen.

    Wie sind die Ideen? Was wäre besser?


Anmelden zum Antworten