"Joao B. Oliveira" wrote:
> Antonio wrote:
>>"Joao B. Oliveira" wrote:
>>> See? Does not look that bad, but an even better solution would be
>>> *other* feature: import .cvs files directly as tables. 
>>I have a little perlscript that produce a floattable (or a simple table) in
>>lyx-format from a tab-separated-value file. (or comma separteded or "!"
>>separated, how you like) (for 4fix1 and 6fix1)
> I really think that such a script for converting tables would be really
> useful! Why don't you publish it on our list? It is always a nice tool
> to have (and if we don't have it, it is nice to know where to find it!)

Hi folks,
I send you my very little perlscript. If you think it is long, its not true.
there are a only 30 codelines, the rest is documentation.

Documentation? 
Yes. pod (perl|poor|pretty old documentation).
on Linux do this: name@host ~/> pod2html csv2lyx > csv2lyx.html

how use it? look the documentation! 
ok, ok. a little help (from the documentation :-)
Sorry for my english (if you want I can translate it to italian, german or
french)

ciao, antonio
(my home e-mail: mailto:[EMAIL PROTECTED])

csv2lyx  - converter from csv-file to a LyX table 
=======
HOW USE IT (under Linux):
=========================
 antonio@bidone:~ >cat mycsvfile | csv2lyx > mytmptable.lyx

Then in LyX: Insert->LyXfile mytmptable.lyx

If you don't want a float table, then can you delete the default-title, the word
"Senseless" will are delete.

If you want a float table, then mark the title _and_ the table and then insert a
floattable

 Insert->LyX File mytmptable.lyx
 [mark the title and the table]
 Insert->Float->Float table

the word "Senseless" will change to "Table"

Options
=======

 --separator="what you want" (default: "\t" for a tab-sep-value file)
 --title="A pretty title for a pretty table" (default:"Title of the LyX table")

==================================================================================
==================================================================================
#! /usr/bin/perl
# csv2lyx
# Copyright (C) 2001 Antonio Gulino
# This program is free software; you can redistribute it and/or modify it under
# the term of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or any later version.

=pod
=head1 NAME

csv2lyx - converter from csv-file to a LyX table

Converts a Comma Separated Value file to a float table in LyX format.
Good for LyX version 1.1.4fix1 and other.

=head1 HOW USE IT

under Linux:

 antonio@bidone:~ >cat mycsvfile | csv2lyx > mytmptable.lyx

Then in LyX: Insert->LyXfile mytmptable.lyx

If you don't want a float table, then can you delete the default-title, the word 
"Senseless"
will are delete.

If you want a float table, then mark the title and the table and then insert a 
floattable

 Insert->LyX File mytmptable.lyx
 [mark the title and the table]
 Insert->Float->Float table

=head2 Options

 --separator="what you want" (default: "\t" for a tab-sep-value file)
 --title="A pretty title for a pretty table" (default:"Title of the LyX table")


=head1 AUTHOR and COPYLEFT

Copyright (C) 2001, Antonio Gulino <[EMAIL PROTECTED]>

This program is free software; you can redistribute it and/or modify it under
the term of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or any later version.

=cut

# l'input non e' il nome di un file, ma il file stesso
# l'output avviene sullo schermo
# dunque l'utilizzo e' cosi:
# antonio@bidone > cat filecsv.csv | csv2lyx | filedioutput

# di default il separatore e' un tabulatore

use Getopt::Long;
$OPT_separator = "\t";
$OPT_title = 'Title of the LyX table';
&GetOptions( "separator=s" => \$OPT_separator,
             "title=s"     => \$OPT_title,);

@csv = <>;
chomp(@csv);
# vediamo quante righe ci sono
# how many row (=righe) are there?
$righe = $#csv + 1;

# adesso leggo l'intero array e creo una matrice: @matrix
# contemporaneamente calcolo il numero massimo di campi, per sapere quante colonne mi 
servono
# now i read the whole array and put it into a matrix : @matrix
# at the same time i look how many column (=colonne) have the biggest row
$col = 0;
foreach my $r (@csv) {
    my @r = split $OPT_separator, $r;
    $colonne = $#r + 1 if $colonne <= $#r;
    push @matrix, [@r];
}

# adesso stampo il codice lyx. l'allineamento avviene a destra (immagino che di solito 
siano cifre)
# produco automaticamente una float table,
# versione funzionante per la 1.1.4fix1
# now I print the LyX format. Align=right (I think this is a matrix of numbers)
# dafault: a float table

print <<LYX;
\\begin_float tab
\\layout Caption

$OPT_title
\\layout Standard
\\align center \\LyXTable
multicol5
$righe $colonne 0 0 -1 -1 -1 -1
LYX
;

# qui viene deciso se ci sono righe in alto o in basso di ciascuna riga
# se la prima cifra e' "1" allora c'e una linea in alto
# se la seconda cifra e' "1" allora c'e una linea in basso
# here I say if there are a border
# if the first number is "1", then a border on the top of the line
# if the second number is "1", then a border on the bottom of the line
$top = '0';
$bottom = '0';
print "$top $bottom 0 0\n" foreach @matrix;

# adesso viene deciso il formato delle colonne
# se la prima cifra e' 2, allora allineamento a sinistra
# se la prima cifra e' 4, allora allineamento a destra
# now the align of the column
# if the first number is "2", then align=left
# if the first number is "4", then align=right
$align = '4';
for ($i=0; $i<$colonne; $i++) {print $align, ' 0 0 "" ""',"\n"};

# adesso tocca alla formattazione delle singole celle.
# personalmente non ci capisco nulla e dunque faccio come ho trovato
# le  celle della prima riga hanno delle informazioni supplementari che di fatto pare 
riguardino
# tutta la colonna sottostante
# la primissima cella pare che abbia una formattazione ancora differente dalle altre

# now the format of each Cell
# I have make only a little "reverse engeneering", i think it's enough.
# the cells of the first row have more informations. These informations are the same
# for all the cells of the same column
# the very very first cell have (so I have understand) an other format

# primissima cella
# very very first cell
print "0 $align 0 0 0 0 0 \"\" \"\"\n";

# prima riga, senza la primissima cella
# first row, whitout the very very fist cell
for ($i=1; $i<$colonne; $i++) {
    print "0 $align 1 0 0 0 0 \"\" \"\"\n";
}

# le altre celle, riga per riga, dalla seconda riga in poi
# the other cells, row by row, start with the second row
for ($j=1; $j<$righe; $j++) {
    for ($i=0; $i<$colonne; $i++) {
        print "0 8 1 0 0 0 0 \"\" \"\"\n";
    }
}

# segue una riga vuota
# a empty line
print "\n";


# adesso segue il contenuto dell celle, riga per riga
# mi raccomando di scrivere qualcosa anche per le celle non esistenti nel file iniziale
# now the contents of each cell, row by row
# remember to put something in each cell
for ($j=0; $j<$righe; $j++) {
    for ($i=0; $i<$colonne; $i++) {
        print $matrix[$j][$i],"\n";
        unless ($j==$righe-1 and $i==$colonne-1) {print '\newline',"\n"};
    }
}
print '\end_float',"\n\n";

1

Reply via email to