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.