Ich habe eine CSV-Datei und möchte diese in meinen Bericht importieren. Dazu nutze ich 'csvsimple'. Leider werden jedoch Sonderzeichen, wie das %-Zeichen (Zeile 6), nicht importiert. Im Minimalbeispiel ist zu sehen, dass alle anderen Zeichen, die nach dem Prozentzeichen kommen, einfach abgeschnitten werden.

Öffne in Overleaf
\documentclass{scrartcl}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{csvsimple}
\usepackage{filecontents}

\begin{filecontents*}{data.csv}
00:00: 0.0,MALFUN,Failure of ACC-1/CL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-1/HL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-2/CL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-2/HL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-3/CL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-3/HL (1 = FAILED) (param.: 1)
 ,MALFUN,Small break in CL-2 (max 100 cm**2) (Break 70% open)
 ,MALFUN,HP injection pump TH25 (failure to run)
 ,MALFUN,HP injection pump TH35 (failure to run)
 ,MALFUN,HP injection pump TH45 (failure to run)
 ,MALFUN,LP injection pump TH20 (failure to run)
 ,MALFUN,LP injection pump TH30 (failure to run)
 ,MALFUN,LP injection pump TH40 (failure to run)
 ,MALFUN,LP injection pump TH17 (failure to run)
 ,MALFUN,LP injection pump TH37 (failure to run)
00:00: 0.7,EVENT,RCS voiding starts in Core
00:00: 2.0,SIGNAL,Containment Pressure > 1.03 bar
 ,SIGNAL,Reactor SCRAM initiation
00:00: 5.1,SIGNAL,Turbine Trip (TSV close)
00:00: 5.1,SYSTEM,VALVE TSV : started to CLOSE from fully open position
00:00: 6.4,SYSTEM,VALVE 0TA11S004 : started to OPEN from fully closed position
00:00: 8.1,SYSTEM,VALVE TSV : fully CLOSED
00:00: 9.5,SIGNAL,Pressurizer Pressure < 133.0 bar
00:00:13.0,SYSTEM,VALVE 0TA11S004 : fully CLOSED
\end{filecontents*}

\begin{document}

\begin{tabularx}{\textwidth}{lllX}
\toprule
  & \textbf{Zeit} & \textbf{Typ} & \textbf{Beschreibung}\\
\midrule
\csvreader[respect all=true,
           late after line=\\,
           late after last line=\\\bottomrule]%
  {data.csv}%
  {}%
  {\thecsvrow & \csvcoli & \csvcolii & \csvcoliii}
\end{tabularx}

\end{document}

gefragt 04 Dez '17, 09:52

dzaic's gravatar image

dzaic
631154954
Akzeptiert-Rate: 42%

bearbeitet 04 Dez '17, 16:05

saputello's gravatar image

saputello
11.1k174365


Du verwendest genau genommen \csvreader in der ersten Spalte einer Tabellenzeile. Das ist generell problematisch. Das gilt umso mehr, wenn man auf \catcode-Änderungen angewiesen ist. csvsimple sieht daher vor, dass man Tabellen durch die Verwendung von tabular (oder longtable o. ä.) festlegt. Da es keinen tabularx-Stil gibt und er aufgrund der Besonderheiten von tabularx nicht so einfach definiert werden kann, wäre die Verwendung einer festen Spaltenbreite für die letzte Spalte eine Notlösung:

Öffne in Overleaf
\documentclass{scrartcl}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}% utf8x bereitet teilweise Probleme
\usepackage[T1]{fontenc}
\usepackage{booktabs}
%\usepackage{tabularx}% für dieses Beispiel nun überflüssig
\usepackage{csvsimple}
\usepackage{filecontents}

\begin{filecontents*}{data.csv}
00:00: 0.0,MALFUN,Failure of ACC-1/CL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-1/HL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-2/CL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-2/HL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-3/CL (1 = FAILED) (param.: 1)
 ,MALFUN,Failure of ACC-3/HL (1 = FAILED) (param.: 1)
 ,MALFUN,Small break in CL-2 (max 100 cm**2) (Break 70% open)
 ,MALFUN,HP injection pump TH25 (failure to run)
 ,MALFUN,HP injection pump TH35 (failure to run)
 ,MALFUN,HP injection pump TH45 (failure to run)
 ,MALFUN,LP injection pump TH20 (failure to run)
 ,MALFUN,LP injection pump TH30 (failure to run)
 ,MALFUN,LP injection pump TH40 (failure to run)
 ,MALFUN,LP injection pump TH17 (failure to run)
 ,MALFUN,LP injection pump TH37 (failure to run)
00:00: 0.7,EVENT,RCS voiding starts in Core
00:00: 2.0,SIGNAL,Containment Pressure > 1.03 bar
 ,SIGNAL,Reactor SCRAM initiation
00:00: 5.1,SIGNAL,Turbine Trip (TSV close)
00:00: 5.1,SYSTEM,VALVE TSV : started to CLOSE from fully open position
00:00: 6.4,SYSTEM,VALVE 0TA11S004 : started to OPEN from fully closed position
00:00: 8.1,SYSTEM,VALVE TSV : fully CLOSED
00:00: 9.5,SIGNAL,Pressurizer Pressure < 133.0 bar
00:00:13.0,SYSTEM,VALVE 0TA11S004 : fully CLOSED
\end{filecontents*}

\newlength{\lastcolumn}
\begin{document}
\settowidth{\lastcolumn}{9900:00:00.0MALFUN}
\setlength{\lastcolumn}{\dimexpr \textwidth-8\tabcolsep-\lastcolumn\relax}
\csvreader[tabular=lllp{\lastcolumn},
           table head = \toprule & \textbf{Zeit} & \textbf{Typ} &
           \textbf{Beschreibung}\\\midrule,
           table foot = \bottomrule,
           respect all,
           late after line=\\,
           late after last line=\\\bottomrule]%
  {data.csv}%
  {}%
  {\thecsvrow & \csvcoli & \csvcolii & \csvcoliii}

\end{document}

Ergebnis mit p-Spalte

Natürlich könnte man die CSV-Daten auch zunächst einmal einlesen, um statt mit einem festen Muster die tatsächliche Maximalbreite der vorderen Spalten zu ermitteln. Eventuell wäre für solche Dinge dann datatool besser geeignet. Wenn man halbwegs eine Ahnung von den zu erwartenden Daten hat, ist die Lösung mit einem Datenmuster wie oben gezeigt aber einfacher und gangbar.

Permanenter link

beantwortet 04 Dez '17, 11:56

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 04 Dez '17, 15:58

@saputello Du schreibst "Du verwendest genau genommen csvreader in der ersten Spalte einer Tabellenzeile." Ich habe mich dabei an einem Beispiel (Seite 4) in der Doku von ´csvsimple´ orientiert. Aber mit deiner Lösung funktioniert es einwandfrei. Herzlichen Dank!

(04 Dez '17, 15:59) dzaic

@dzaic: Das gilt für das Beispiel in der Anleitung genauso. Und es ändert nichts daran, dass es problematisch ist. Dort funktioniert es, weil die Randbedingungen passen. Bei Dir passen sie nicht. Wobei auch in der Anleitung steht, dass es more preferrable ist, die Tabelle samt Kopf und Fuß von \csvreader erzeugen zu lassen. Ein Problem ist, dass eine Tabellenzelle immer eine Gruppe darstellt. \catcode-Änderungen in der ersten Tabellenzelle, sind also schon in der zweiten vergessen.

(04 Dez '17, 16:09) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×256
×32
×16
×13
×1

gestellte Frage: 04 Dez '17, 09:52

Frage wurde gesehen: 6,244 Mal

zuletzt geändert: 04 Dez '17, 16:11