
Am Wed, 30 Jul 2003 17:07:15 +0200 Schrieb Gerson.Kurz@t-online.de (Gerson Kurz):
Gegeben einen C-Header, der aus Zeug wie dem folgenden besteht:
DECLARE_STRING(IDS_XYZ_STATUS_BUSY, "Busy") DECLARE_STRING(IDS_XYZ_STATUS_COVER_OPEN, "Cover open") DECLARE_STRING(IDS_XYZ_STATUS_DOOR_OPEN, "Door open") ....(usw, viele hundert Zeilen lang)...
möchte ich eine Datei erzeugen, die so ausschaut:
[IDS_XYZ_STATUS_BUSY] "Busy"
[IDS_XYZ_STATUS_COVER_OPEN] "Cover open"
[IDS_XYZ_STATUS_DOOR_OPEN] "Door open"...
#!/usr/bin/env python import sys, xreadlines if len(sys.argv) == 1 or sys.argv[1] in ["-h", "--help"]: print "usage : %s infile [outfile]" (sys.argv[0]) sys.exit(0) if len(sys.argv) == 3: out = open(sys.argv[2]) else: out = sys.stdout hfile = open(sys.argv[1]) for line in xreadlines.xreadlines(hfile): if line.find("DECLARE_STRING(") >= 0: p1 = line.find("(")+1 p2 = line.find(",") p3 = line.find('"',p2) p4 = line.find('"',p3+1)+1 out.write("["+(line[p1:p2].strip())+"]\n") out.write(line[p3:p4]+"\n\n") hfile.close() if out != sys.stdout: out.close()
Dachte ich mir, kopierst du den Auszug in ein Pythonscript und schreibst
def DECLARE_STRING(irgendwas, blabla):
aber das ist ein Schmarrn, weil, die IDs sind nicht natürlich - äh - natürlich nicht definiert. Nun bin ich ja, die Herren Gläubigen des Templategötzens mögen es mir verzeihen, Senior-Makrologe und schreibe gerne Sachen wie
#ifdef IMPORT_BUILD
#define DECLARE_STRINGS(__NAME__,__CONTENT__) \ extern const char* __NAME__;
#else
#define DECLARE_STRINGS(__NAME__,__CONTENT__) \ const char* __NAME__ = __CONTENT;
#endif
Nun heisst es ja immer, mit Python könne man alles Makromäßige umsetzen
wie aber mache ich sowas? Ich will ja praktisch auf der Fliege ("on the fly"), neue Variablen erzeugen.
Wäre es möglich, sich in den Name Lookup der Variablen zu hängen, so daß man z.B. bei Undeclared Identifier die Möglichkeit hat, sich 'ne neue anzuschaffen?
Du könntest ein (temporäres) Modul ins aktuelle Verzeichnis schreiben lassen, mit den Deklarationen, z.B. 'IDS_XYZ_STATUS_BUSY = "Busy"' und dieses Modul dann importieren mit "from declarations import *" Gruß Fritz _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de