[Python-de] Re: simpler macro expander

Matt Dunford zoot at zotikos.com
Tue Aug 21 13:44:27 EDT 2001


On Thu, Jul 19, 2001 at 07:36:59PM -0400, root wrote:
> ich habe einen preprocessor geschrieben der einfache textmacros
> in ascii dateien expandiert und aus der eingabe datei eine ausgabe
> datei erzeugt.
> 
> ich habe das problem das der text der in das outfile geschrieben wird
> in etwa so aussieht:
> 
> 'Das hier ist ein bissi Text.\012', 'Hier steckt auch ein macro drin.\012', 
> 'Stefan Antoni hei\337e ich, und mein macro, n\344mlich mein name, wurde 
> expandiert.\012', 'ausserdem noch sasoft at gmx.de.\012']
> 
> 
> aber es sollte EIGENTLICH SO AUSSEHEN:
> 
> Das hier ist ein bissi Text.
> Hier steckt auch ein macro drin.
> myName heiße ich, und mein macro, nämlich mein name, wurde expandiert.
> ausserdem noch myMail.
> 
> (myName und myMain sind die macros)
> 
> 
> 
> hier der quelltext (sorry das ich nicht kürze, ich glaube es ist leichter für 
> euch wenn ihr alles im zusammenhang sehen könnt)
> 
> import re, sys
> from macros import * # imports the dict "macros" where you can put your own   
>                                         # ones
>  
> #usage: processor <infile> <outfile>
> #file: processor.py
>  
> class processor:
>  
>         def __init__(self):
>                 self.__version = 0.1
>  
>         def parse(self, fileToParse, fileToWrite):
>                 fr = open(fileToParse, 'r')
>                 fw = open(fileToWrite, 'wr')
>                 frdata = fr.readlines()
>                 fr.close()
>                 frdata = str(frdata)
>  
>                 iterate = 0
>                 for x in macros.items():
>                   frdata = frdata.replace(macros.keys()[iterate], 
> macros.values()[iterate])
>                   iterate += 1
>  
>  
>                 fw.writelines(frdata)
>                 fw.close()
>  
> if __name__ == '__main__':
>         p = processor()
>         p.parse(sys.argv[1], sys.argv[2])
> 
> 
> so sieht meine macro-datei aus:
> 
> # file: macros.py
> macros = {
>           'myName' : 'Stefan Antoni',
>           'myMail' : 'sasoft at gmx.de'
>          }

Warum nicht 'sed'?  Zum Beispiel:

%> sed -e 's/myName/Stefan Antoni/g' -e 's/myMail/sasoft at gmx.de/g' <infile >outfile

Oder 'cpp':

%> cpp -DmyName='Stefan Antoni' -DmyMail='sasoft at gmx.de' infile outfile

Warum erfindet das Rad wieder?

-- 
- Matt Dunford <> zoot at zotikos.com ..
-. www.zotikos.com -- o,;-
	
"I will have a foreign-handed foreign policy."
   -- George W. Bush, Redwood, Calif., Sep. 27.
--



More information about the Python-de mailing list