Datum: 2004-02-16
Quelle: suse-linux
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.
# 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
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.