mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-11 19:14:51 +00:00
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:
parent
58220e118d
commit
b1faf53669
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user