Update file to the last version discussed on bugzilla and on the devel list

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24821 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
José Matox 2008-05-18 19:26:05 +00:00
parent 58220e118d
commit b1faf53669

View File

@ -6,8 +6,8 @@
# Licence details can be found in the file COPYING.
# author Hartmut Haase
# author Uwe Stöhr
# author José Matos
# Full author contact details are available in file CREDITS
# This script reads a csv-table (file name.csv) and converts it into
@ -24,86 +24,7 @@ def error(message):
sys.stderr.write(message + '\n')
sys.exit(1)
# processing command line options
# delegate this to standard module optparse
args = {}
args["usage"] = "Usage: csv2lyx [options] mycsvfile mytmptable.lyx"
args["description"] = """This script creates a LyX document containing a table
from a comma-separated-value file. The LyX file has format 276
and can be opened with LyX 1.5.0 and newer.
"""
parser = optparse.OptionParser(**args)
parser.set_defaults(excel = 'n', column_sep = 'n', guess_sep = False)
parser.add_option("-e", "--excel",
help="""'character' Excel type, default is 'n'
'e': Excel-generated CSV file
't': Excel-generated TAB-delimited CSV file""")
parser.add_option("-s", "--separator", dest="column_sep",
help= "column separator, default is ','")
parser.add_option("-g", "--guess-sep", action="store_true",
help = "guess the columns separator")
group = optparse.OptionGroup(parser, "Remarks", """If your .csv file contains special characters (e. g. umlauts,
accented letters, etc.) make sure it is coded in UTF-8 (unicode).
Else LyX will loose some cell contents. If your .csv file was not written according to the "Common Format and MIME Type for Comma-Separated Values (CSV) Files" (http://tools.ietf.org/html/rfc4180) there may be unexpected results.""")
parser.add_option_group(group)
(options, args) = parser.parse_args()
# validate input
if len(args) == 1:
infile = args[0]
fout = sys.stdout
elif len(args) ==2:
infile = args[0]
fout = open(args[1], 'w')
else:
parser.print_help()
sys.exit(1)
if not os.path.exists(infile):
error('File "%s" not found.' % infile)
dialects = {'n' : None, 'e' : 'excel', 't' : 'excel-tab'}
if options.excel not in dialects:
parser.print_help()
sys.exit(1)
dialect= dialects[options.excel]
# when no special column separator is given, try to detect it:
if options.column_sep == 'n':
options.guess_sep = 'True'
print options.column_sep, options.guess_sep
if options.guess_sep:
guesser = csv.Sniffer()
input_file = "".join(open(infile,'rb').readlines())
try:
dialect = guesser.sniff(input_file)
print 'found:', dialect.delimiter
reader = csv.reader(open(infile, "rb"), dialect= dialect)
except:
print 'error, using ,'
reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=',')
else:
reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=options.column_sep)
# read input
num_cols = 1 # max columns
rows = []
for row in reader:
num_cols = max(num_cols, len(row))
rows.append(row)
num_rows = reader.line_num # number of lines
# create a LyX file
#####################
# write first part
####################
fout.write("""#csv2lyx created this file
header = """#csv2lyx created this file
\lyxformat 276
\\begin_document
\\begin_header
@ -142,50 +63,21 @@ fout.write("""#csv2lyx created this file
\\begin_layout Standard
\\align left
\\begin_inset Tabular
""")
fout.write('<lyxtabular version="3" rows=\"' + str(num_rows) + '\" columns=\"' + str(num_cols) + '\">\n')
fout.write('<features>\n')
#####################
# write table
####################
i = 0
while i < num_cols:
fout.write('<column alignment="left" valignment="top" width="0pt">\n')
i += 1
j = 0
while j < num_rows:
fout.write('<row>\n')
num_cols_2 = len(rows[j]) # columns in current row
#print j, ': ' , rows[j]
############################
# write contents of one line
############################
i = 0
while i < num_cols_2:
fout.write("""<cell alignment="left" valignment="top" usebox="none">
<lyxtabular version="3" rows="%d" columns="%d">
<features>
"""
cell = """<cell alignment="left" valignment="top" usebox="none">
\\begin_inset Text
\\begin_layout Standard\n""")
#print rows[j][i]
fout.write(rows[j][i])
fout.write('\n\\end_layout\n\n\\end_inset\n</cell>\n')
i += 1
# If row has less columns than num_cols
if num_cols_2 < num_cols:
while i < num_cols:
fout.write("""<cell alignment="left" valignment="top" usebox="none">
\\begin_inset Text
\\begin_layout Standard
%s
\\end_layout
\\begin_layout Standard\n""")
fout.write(' ')
fout.write('\n\\end_layout\n\n\\end_inset\n</cell>\n')
i += 1
fout.write('</row>\n')
j += 1
#####################
# write last part
####################
fout.write("""</lyxtabular>
\\end_inset
</cell>"""
footer = """</lyxtabular>
\\end_inset
@ -193,6 +85,113 @@ fout.write("""</lyxtabular>
\\end_layout
\\end_body
\\end_document\n""")
\\end_document
"""
# processing command line options
# delegate this to standard module optparse
args = {}
args["usage"] = "Usage: csv2lyx [options] csvfile [file.lyx]"
args["description"] = """This script creates a LyX document containing a table created from a
comma-separated-value (CSV) file. The resulting LyX file can be opened
with LyX 1.5.0 or any later version.
If no options are given csv2lyx will try to infer the CSV type of the csvfile,
"""
parser = optparse.OptionParser(**args)
parser.set_defaults(excel='', column_sep='')
parser.add_option("-e", "--excel", metavar="CHAR",
help="""CHAR corresponds to a CSV type:
'e': Excel-generated CSV file
't': Excel-generated TAB-delimited CSV file""")
parser.add_option("-s", "--separator", dest="column_sep",
help= """column separator
't' means Tab""")
group = optparse.OptionGroup(parser, "Remarks", """If your CSV file contains special characters (e. g. umlauts,
accented letters, etc.) make sure it is coded in UTF-8 (unicode).
Else LyX will loose some cell contents. If your CSV file was not written according to the "Common Format and MIME Type for Comma-Separated Values (CSV) Files" (http://tools.ietf.org/html/rfc4180) there may be unexpected results.""")
parser.add_option_group(group)
(options, args) = parser.parse_args()
# validate input
if len(args) == 1:
infile = args[0]
fout = sys.stdout
elif len(args) ==2:
infile = args[0]
fout = open(args[1], 'w')
else:
parser.print_help()
sys.exit(1)
if not os.path.exists(infile):
error('File "%s" not found.' % infile)
dialects = {'' : None, 'e' : 'excel', 't' : 'excel-tab'}
if options.excel not in dialects:
parser.print_help()
sys.exit(1)
dialect= dialects[options.excel]
# Set Tab, if necessary
if options.column_sep == 't':
options.column_sep = "\t"
# when no special column separator is given, try to detect it:
if options.column_sep or dialect :
reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=options.column_sep)
else:
guesser = csv.Sniffer()
input_file = "".join(open(infile,'rb').readlines())
try:
dialect = guesser.sniff(input_file)
reader = csv.reader(open(infile, "rb"), dialect= dialect)
except:
reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=',')
# read input
num_cols = 1 # max columns
rows = []
for row in reader:
num_cols = max(num_cols, len(row))
rows.append(row)
num_rows = reader.line_num # number of lines
# create a LyX file
#####################
# write first part
####################
fout.write(header % (num_rows, num_cols))
#####################
# write table
####################
for i in range(num_cols):
fout.write('<column alignment="left" valignment="top" width="0pt">\n')
for j in range(num_rows):
row = ['<row>']
############################
# write contents of one line
############################
for i in range(len(rows[j])):
row.append( cell % rows[j][i])
# If row has less columns than num_cols fill with blank entries
for i in range(len(rows[j]), num_cols):
row.append(cell % " ")
fout.write("\n".join(row) + '\n</row>\n')
#####################
# write last part
####################
fout.write(footer)
# close the LyX file
fout.close()