3 # gpiv_series - Processes a set of numbered input data
5 # Copyright (C) 2008 Gerber van der Graaf
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2, or (at your option)
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software Foundation,
19 # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 #--------------------------------------------------------------------
25 # This version is for serial processing
30 #----------- Command line arguments parser
32 from optparse
import OptionParser
34 usage
= "%prog [options] \"process\""
35 parser
= OptionParser(usage
)
36 parser
.add_option("-a", "--arg_n",
37 action
="store_true", dest
="arg_n", default
=False,
38 help="if the process needs the current number in its \
39 argument list instead of prepending/appending it to the \
40 filebase name, the number will be put before (-f) \
41 \"filename\" in the \"process\" string.")
42 parser
.add_option("-b", "--basename", type='string', dest
="basename",
43 help="File basename for reading", metavar
="FILE")
44 parser
.add_option("-e", "--ext", type='string', dest
="ext", metavar
="EXT",
45 help="add an extension after the file basename + number (without leading \".\")")
46 parser
.add_option("-f", "--first", type='int', dest
="first_nr", default
=0,
47 help="first numbered file (default: 0)", metavar
="N")
48 parser
.add_option("-l", "--last", type='int', dest
="last_nr", default
=0,
49 help="last numbered file(default: 0)", metavar
="N")
50 parser
.add_option("-i", "--incr", type='int', dest
="incr_nr", default
=1,
51 help="increment file number (default: 1)", metavar
="N")
52 parser
.add_option("-p", "--print",
53 action
="store_true", dest
="pri", default
=False,
54 help="prints process parameters/variables to stdout")
55 parser
.add_option("--pad", type='int', dest
="pad0", default
=0,
56 help="padding number with zero's (default: 0)", metavar
="N")
57 parser
.add_option("-n", "--none",
58 action
="store_true", dest
="none", default
=False,
59 help="suppresses real execution")
60 parser
.add_option("-x", "--prefix", action
="store_true", dest
="prefix", default
=False,
61 help="prefix numbering to file basename")
63 (options
, args
) = parser
.parse_args()
65 parser
.error("incorrect number of arguments")
69 if not "FNAME" in process
:
70 parser
.error("process does not contain the required string 'FNAME'")
73 #----------- Function definitions
75 def pri_date(msg
= "Time stamp at start of series processing:"):
79 msg -- message to be printed before time stamp
81 if options
.pri
== True:
91 """Counts number of digits from a number
94 nr -- number to be questioned
104 """Created a string for zero padding
107 nr -- number of zeros to be padded
110 for i
in range(0, nr
):
116 def compose_name_nr(nr
):
117 """Creates proper name from basename and number.
120 nr -- number of filename to be processed
123 ndig
=count_digits(nr
)
124 null_str
=pad0(options
.pad0
- ndig
)
125 nr_str
=null_str
+str(nr
)
131 name
=str(options
.basename
)
133 name
=nr_str
+str(options
.basename
)
136 name
=str(options
.basename
)
138 name
=str(options
.basename
)+nr_str
140 if str(options
.ext
) != "None":
141 name
=str(name
)+str(".")+str(options
.ext
)
146 def compose_cmd(name
, nr
):
147 """Creates proper command.
150 name -- complete filename
153 # Eventually, substitutes "-f" with: "nr -f"
156 command
=re
.sub("-f", str(nr
)+" -f", command
)
158 command
=re
.sub("FNAME", str(nr
)+" FNAME", command
)
159 # Substitutes "FNAME" with the file base name
160 command
=re
.sub("FNAME", str(name
), str(command
))
165 def proc_series_ser():
166 """Processes a series on identic numbered files.
168 for i
in range(options
.first_nr
, options
.last_nr
+1, options
.incr_nr
):
169 name_nr
= compose_name_nr(i
)
170 command
= compose_cmd(name_nr
, i
)
172 if options
.pri
== True: print command
173 elif options
.none
== True: print command
174 if options
.none
== False: os
.system(command
)
178 #----------- Calling functions
180 if options
.pri
== True: pri_date()
181 elif options
.none
== True: pri_date()
183 if options
.pri
== True: pri_date(msg
= "Time stamp at end of series processing:")
184 elif options
.none
== True: pri_date(msg
= "Time stamp at end of series processing:")
186 #----------- That's all folks