parent
989a2b2d39
commit
a2b46c8a36
|
@ -29,6 +29,7 @@ class extendableOption(Option):
|
||||||
|
|
||||||
parser = OptionParser(option_class=extendableOption, usage='%prog options [file[s]]', description = """
|
parser = OptionParser(option_class=extendableOption, usage='%prog options [file[s]]', description = """
|
||||||
Add column(s) with derived values according to user defined arithmetic operation between column(s).
|
Add column(s) with derived values according to user defined arithmetic operation between column(s).
|
||||||
|
Columns can be specified either by label or index.
|
||||||
|
|
||||||
Example: distance to IP coordinates -- "math.sqrt( #ip.x#**2 + #ip.y#**2 + #ip.z#**2 )"
|
Example: distance to IP coordinates -- "math.sqrt( #ip.x#**2 + #ip.y#**2 + #ip.z#**2 )"
|
||||||
""" + string.replace('$Id$','\n','\\n')
|
""" + string.replace('$Id$','\n','\\n')
|
||||||
|
@ -81,6 +82,11 @@ for file in files:
|
||||||
formula = formula.replace('#'+operand+'#','{%i}'%position)
|
formula = formula.replace('#'+operand+'#','{%i}'%position)
|
||||||
if operand in specials:
|
if operand in specials:
|
||||||
interpolator += ['specials["%s"]'%operand]
|
interpolator += ['specials["%s"]'%operand]
|
||||||
|
elif operand.isdigit():
|
||||||
|
if len(table.labels) > int(operand):
|
||||||
|
interpolator += ['float(table.data[%i])'%(int(operand))]
|
||||||
|
else:
|
||||||
|
parser.error('column %s not present...\n'%operand)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
interpolator += ['float(table.data[%i])'%table.labels.index(operand)]
|
interpolator += ['float(table.data[%i])'%table.labels.index(operand)]
|
||||||
|
@ -96,17 +102,18 @@ for file in files:
|
||||||
|
|
||||||
# ------------------------------------------ process data ---------------------------------------
|
# ------------------------------------------ process data ---------------------------------------
|
||||||
|
|
||||||
while table.data_read(): # read next data line of ASCII table
|
outputAlive = True
|
||||||
|
while outputAlive and table.data_read(): # read next data line of ASCII table
|
||||||
|
|
||||||
specials['_row_'] += 1 # count row
|
specials['_row_'] += 1 # count row
|
||||||
for label in options.labels: table.data_append(eval(eval(evaluator[label])))
|
for label in options.labels: table.data_append(eval(eval(evaluator[label])))
|
||||||
table.data_write() # output processed line
|
outputAlive = table.data_write() # output processed line
|
||||||
|
|
||||||
# ------------------------------------------ output result ---------------------------------------
|
# ------------------------------------------ output result ---------------------------------------
|
||||||
|
|
||||||
table.output_flush() # just in case of buffered ASCII table
|
outputAlive and table.output_flush() # just in case of buffered ASCII table
|
||||||
|
|
||||||
file['input'].close() # close input ASCII table
|
file['input'].close() # close input ASCII table
|
||||||
if file['name'] != 'STDIN':
|
if file['name'] != 'STDIN':
|
||||||
file['output'].close # close output ASCII table
|
file['output'].close() # close output ASCII table
|
||||||
os.rename(file['name']+'_tmp',file['name']) # overwrite old one with tmp new
|
os.rename(file['name']+'_tmp',file['name']) # overwrite old one with tmp new
|
||||||
|
|
Loading…
Reference in New Issue