Hallo Arlecks
Wie soll ich die Datei lesen?
Na, mit ofstream oder FILE* oder was Dir lieber ist.
(Wie liest man nur bis zum nächsten Semikolon?)
In einer Schleife rattern solange, bis
if (ch == ';')
true ist. Das ist nicht so schwer, ey?
Es gibt auch Freunde von std::string’s, die dann die Suchfunktion von diesen verwenden.
Ich mache das lieber so:
char\* openText (char \*fileName, char \*mode="rt");
// in der main():
char \*source = openText ("hat\_structs.h");
Die openText() steckt also die gesamte Datei in den char-Zeiger.
Wie macht der Compiler das?
Die schreiben sich halt ein paar Klassen, packen das rein, was die können sollen, und ab dafür. Meist werden Reguläre Ausdrücke eingesetzt. Perl wäre für Text eine gute Alternative: du könntest damit eine Datei mit Deinen struct’s generieren.
Woran erkenne ich eine neue Deklaration?
Allein nach dem Wort ‚struct‘ zu suchen, reicht natürlich
nicht.
Du weisst ja, wie man eine Structure schreibt?
Jetzt suche ich mit strstr() nach den Tokens, die in die Tüte kommen. Jetzt willst Du die „union“ vielleicht auch, kommt auf Dich drauf an.
Mit „struct“ bei C++:
- Ich finde das Token „struct“ in „source“.
- nachrücken um die strlen().
- Das nächste Wort ist der Datentyp.
- per Schleife nachrücken bis zum ‚{‘.
- kopieren bis ‚}‘.
Mit „typedef struct“ in C geht es ähnlich, nur dass der Datentyp halt unten dran hängt. Aber du weisst ja Bescheid. Wenn einer C/C++ kann, weiss er auch, wie das geschrieben sein kann. Man muss halt recht fix sein im Umgang mit „char-Zeiger subtrahieren“ etc.
Aber glaube nicht, dass das ein Honiglecken ist. Ich plage mich seit 2,5 Jahren mit meiner CodeParser-Klasse. Mal läuft sie, mal nicht.
lG
Martin B