Hartmut's csv2lyx.py script.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_5_X@24660 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Spitzmüller 2008-05-07 16:43:29 +00:00
parent df7b002d19
commit dd6cbed911
5 changed files with 163 additions and 0 deletions

View File

@ -2820,6 +2820,7 @@ lib_scripts_files = Split('''
TeXFiles.py
clean_dvi.py
convertDefault.py
csv2lyx.py
date.py
ext_copy.py
fen2ascii.py

View File

@ -1030,6 +1030,7 @@ dist_scripts_PYTHON = \
scripts/TeXFiles.py \
scripts/clean_dvi.py \
scripts/convertDefault.py \
scripts/csv2lyx.py \
scripts/date.py \
scripts/ext_copy.py \
scripts/fen2ascii.py \

View File

@ -306,6 +306,7 @@ def checkFormatEntries(dtl_tools):
#
# entried that do not need checkProg
addToRC(r'''\Format date "" "date command" "" "" "" ""
\Format csv csv "Comma-separated values" "" "" "" "document"
\Format fax "" Fax "" "" "" "document"
\Format lyx lyx LyX "" "" "" ""
\Format lyx13x lyx13 "LyX 1.3.x" "" "" "" "document"
@ -492,6 +493,7 @@ def checkConverterEntries():
#
# Entries that do not need checkProg
addToRC(r'''\converter lyxpreview ppm "python -tt $$s/scripts/lyxpreview2bitmap.py" ""
\converter csv lyx "python -tt $$s/scripts/csv2lyx.py $$i $$o" ""
\converter date dateout "python -tt $$s/scripts/date.py %d-%m-%Y > $$o" ""
\converter docbook docbook-xml "cp $$i $$o" "xml"
\converter fen asciichess "python -tt $$s/scripts/fen2ascii.py $$i $$o" ""

157
lib/scripts/csv2lyx.py Normal file
View File

@ -0,0 +1,157 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# file csv2lyx.py
# This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING.
# author Hartmut Haase
# Full author contact details are available in file CREDITS
# This script reads a csv-table (file name.csv) and converts it into
# a LyX-table for versions 1.5.0 and higher (LyX table format 276).
# The original csv2lyx was witten by Antonio Gulino <antonio.gulino@tin.it>
# in Perl for LyX 1.x and modified for LyX table format 276 by the author.
#
import os, re, string, sys, unicodedata
def error(message):
sys.stderr.write(message + '\n')
sys.exit(1)
# processing command line options
if len(sys.argv) == 1 or sys.argv[1] == '--help':
print '''Usage:
csv2lyx [options] mycsvfile mytmptable.lyx
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.
Options:
-s separator column separator, default is Tab
--help usage instructions
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.'''
sys.exit(0)
# print len(sys.argv), sys.argv
separator = '\t'
infile = ""
if len(sys.argv) == 3:
infile = sys.argv[1]
outfile = sys.argv[2]
elif len(sys.argv) == 5:
infile = sys.argv[3]
outfile = sys.argv[4]
if sys.argv[1] == '-s':
separator = sys.argv[2]
if not os.path.exists(infile):
error('File "%s" not found.' % infile)
# read input
finput = open(infile, 'r')
rowcontent = finput.readlines()
finput.close()
num_rows = len(rowcontent) # number of lines
# print 'num_rows ', num_rows
i = 0
num_cols = 1 # max columns
while i < num_rows:
# print len(rowcontent[i]), ' ', rowcontent[i]
num_cols = max(num_cols, rowcontent[i].count(separator) + 1)
i += 1
# print num_cols
fout = open(outfile, 'w')
#####################
# write first part
####################
fout.write("""#csv2lyx created this file
\lyxformat 276
\\begin_document
\\begin_header
\\textclass article
\\inputencoding auto
\\font_roman default
\\font_sans default
\\font_typewriter default
\\font_default_family default
\\font_sc false
\\font_osf false
\\font_sf_scale 100
\\font_tt_scale 100
\\graphics default
\\paperfontsize default
\\papersize default
\\use_geometry false
\\use_amsmath 1
\\use_esint 0
\\cite_engine basic
\\use_bibtopic false
\\paperorientation portrait
\\secnumdepth 3
\\tocdepth 3
\\paragraph_separation indent
\\defskip medskip
\\papercolumns 1
\\papersides 1
\\paperpagestyle default
\\tracking_changes false
\\output_changes false
\\end_header
\\begin_body
\\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')
row = str(rowcontent[j])
row = string.split(row,separator)
#print j, ': ' , row
############################
# write contents of one line
############################
i = 0
while i < num_cols:
fout.write("""<cell alignment="left" valignment="top" usebox="none">
\\begin_inset Text
\\begin_layout Standard\n""")
fout.write(row[i].strip('\n'))
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
\\end_layout
\\end_body
\\end_document\n""")
fout.close()

View File

@ -52,6 +52,8 @@ What's new
* DOCUMENT INPUT/OUTPUT
- New import option for comma-separated-value files.
- Add support for the HTML-to-LaTeX converters gnuhtml2latex and
htmltolatex (bug 4615).