T0bi schrieb:
Da Quelltext Datein enorm groß werden können, wäre es sinnvoll, die Datei Zeile fuer Zeile in einem String einzulesen oder du sicherst dir immer nur 512 Zeichen durch suchst die und machst dann mit den nächsten 512 Zeichen weiter ( Aber Achtung! es könnte passieren das du so evtl. ungewollt ein Wort teilst, also vorher immer prüfen ob da nen Withespace ist ), nicht so wie du es machen willst die komplette Datei in einen String zu packen, das geht evtl. mit kleinen Datein aber nicht wenn du nen 10000Zeilen Quelltext durchforsten möchtest.
1. Wenn ein einzelnes Source File eines Projekts 10.000 Zeilen hat, will ich - und viele andere - damit nichts zu tun haben.
2. Stur eine feste Anzahl an Bytes zu lesen ist wohl kompletter unfug, Zeile für Zeile einzulesen ist in C/C++ - Sources bestenfalls subobtimal. Entweder sofort Token um Token oder komplette Statements. Nur auf Whitespaces zu achten um festzustellen ob man ein Token zerrissen hat, reicht nicht.
@OP: Deine Frage ist leider etwas schwammig formuliert. Ich sehe aber durch meine Glaskugel, dass Du nach Literalen suchen willst, um sie dann - einem entsprechenden Identifier zugeordnet - in eine .ini zu schreiben.
Wie zeichnen sich die Literale aus, die Du suchen willst? (Sind sie vielleicht immer in initialisierungen zu finden?)
Wie willst du den in die .ini zu schreibenden Literalen die richtigen Namen zuordnen?
Daraus ergeben sich folgende Aufgaben:
Schreibe eine Funktion, die dir das nächste Token aus der Datei liefert.
Schreibe eine Funktion, die dir das nächste Statement (=Array aus Tokens) aus der Datei liefert (indem sie die Funktion für das nächste Token verwendet; Stop bei ";").
Schreibe eine Funktion, die feststellt, ob es sich bei einem Statement um eine Deklaration handelt. In diesem Fall ist das erste Token entweder ein Modifier ( unsigned , short , register , ...) oder ein eingebauter Typ ( char , short , int , ...).
Schreibe eine Funktion, die Namen/Werte-Paare in Deklarationen findet und in einem dynamischen Array eines struct { char* name, *value }; ablegt.
Schreibe eine Funktion, die die gefundenen Namen/Werte-Paare in eine Datei schreibt.
Du hast fertig
cheers, Swordfish
edit: zu müde für Rechtschreibung...
edit2: Das funktioniert natürlich nur für eingebaute Typen. Für alles andere musst du tatsächlich Compiler spielen.