CSV-Datei in LaTeX-Format konvertieren

Datum: 2004-02-16
Quelle: suse-linux

Worum ging es?

Ausgangspunkt war ein Script zum Konvertieren von Excel-Daten, die als CSV gespeichert sind, in LaTeX. Von LaTeX verstehe ich nichts, aber das Script konnte ich ein wenig verbessern.

Code
# Zeile in Quelldatei / line in source file:
# "dies";"waren meine";"csv";"Testdaten"
# Zeile in Zieldatei / line in destination file:
# dies & waren meine & csv & Testdaten \\
# Header
cat >"$NEW" <<EOF
\documentclass[a4paper,12pt]{article}
\usepackage{german}
\usepackage{longtable}
\begin{document}
%\begin {table}[htbp]
\begin {center}
EOF
# Tabelleninhalt / table content
# $1 = Eingabedatei / input file
sed 's/^"\(.*\)"$/\1/' "$1" | \
awk -F '";"' '
  NR == 1 { for (i=1; i<= NF; i++) cols = cols"l";
            printf "\\begin {longtable} {%s}\n", cols;
            printf "%\\begin {tabular} {%s}\n", cols;
          }
  { for (i = 1; i < NF; i ++) printf "%s & ", $i;
    printf "%s \\\\\n", $NF;
  } ' - >>"$NEW"
# footer
cat >>"$NEW" <<EOF
%\end {tabular}
\end {longtable}
\end {center}
%\end {table}
\end{document}
EOF
Beschreibung

Folgende Dinge sind meiner Meinung nach interessant in der Umsetzung:
Zum Ausgeben mehrzeiliger Daten in die Ausgabedatei werden sogenannte HERE-Dokumente benutzt. Diese Form der Ausgabe hat u. a. den Vorteil, dass man sich nicht mehr groß um das Entwerten von Sonderzeichen kümmern muss. Ein HERE-Dokument beginnt mit cat <<EOF und endet mit EOF, das allein und am Anfang der Zeile stehen muss. Als Start- und Stopsequenz kann auch was anderes benutzt werden, es muss aber vorn und hinten die gleiche sein.
Die Behandlung der Anführungszeichen in der CSV-Datei: Das erste und letzte in der Zeile wird durch den sed entsorgt, die zwischendrin stehenden werden vom awk als Feldtrenner mitbenutzt (Option -F '";"') und tauchen dadurch in der Ausgabe nicht mehr auf.