63 lines
2.7 KiB
Python
Executable File
63 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: UTF-8 no BOM -*-
|
|
|
|
import os,sys,string,damask
|
|
from optparse import OptionParser
|
|
|
|
scriptID = '$Id$'
|
|
scriptName = scriptID.split()[1]
|
|
|
|
# --------------------------------------------------------------------
|
|
# MAIN
|
|
# --------------------------------------------------------------------
|
|
|
|
parser = OptionParser(usage='%prog [options] [file[s]]', description = """
|
|
Show components of given ASCIItable(s).
|
|
""" + string.replace(scriptID,'\n','\\n')
|
|
)
|
|
|
|
|
|
parser.add_option('-a','--head', dest='head', action='store_true', help='output all heading (info + labels)')
|
|
parser.add_option('-i','--info', dest='info', action='store_true', help='output info lines')
|
|
parser.add_option('-l','--labels', dest='labels', action='store_true', help='output labels')
|
|
parser.add_option('-d','--data', dest='data', action='store_true', help='output data')
|
|
parser.add_option('-c','--column', dest='col', action='store_true', help='switch to label column format')
|
|
parser.add_option('--nolabels', dest='nolabels', action='store_true', help='table has no labels')
|
|
|
|
parser.set_defaults(col = False)
|
|
parser.set_defaults(nolabels = False)
|
|
(options,filenames) = parser.parse_args()
|
|
|
|
|
|
# ------------------------------------------ setup file handles ---------------------------------------
|
|
|
|
files = []
|
|
if filenames == []:
|
|
files.append({'name':'STDIN', 'input':sys.stdin, 'output':sys.stdout, 'croak':sys.stderr})
|
|
else:
|
|
for name in filenames:
|
|
if os.path.exists(name):
|
|
files.append({'name':name, 'input':open(name), 'output':sys.stdout, 'croak':sys.stderr})
|
|
|
|
# ------------------------------------------ extract labels ---------------------------------------
|
|
|
|
for file in files:
|
|
if file['name'] != 'STDIN': file['croak'].write('\033[1m'+scriptName+'\033[0m: '+file['name']+'\n')
|
|
else: file['croak'].write('\033[1m'+scriptName+'\033[0m\n')
|
|
|
|
table = damask.ASCIItable(file['input'],file['output'],buffered=False,labels=not options.nolabels) # make unbuffered ASCII_table
|
|
table.head_read() # read ASCII header info
|
|
if options.head or options.info: file['output'].write('\n'.join(table.info)+'\n')
|
|
if options.head or options.labels: file['output'].write({True:'\n',False:'\t'}[options.col].join(table.labels)+'\n')
|
|
|
|
# ------------------------------------------ output data ---------------------------------------
|
|
|
|
outputAlive = options.data
|
|
while outputAlive and table.data_read(): # read next data line of ASCII table
|
|
outputAlive = table.data_write() # output line
|
|
|
|
outputAlive and table.output_flush()
|
|
|
|
if file['name'] != 'STDIN':
|
|
file['input'].close()
|