DTLforeach - nur 10 Spalten möglich?

Tabellen und Grafiken erstellen und anordnen


ionas
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 20. Okt 2015, 16:27

DTLforeach - nur 10 Spalten möglich?

Beitrag von ionas »

Hallo!

Ich bin gerade dabei Tabellen mit externen .csv-Daten zu befüllen.
Für unterschiedliche Tabellen mache ich das immer analog und bis zu 10 Spalten geht das wunderbar.
Wenn ich jetzt column11 hinzufüge meckert er:

! Package datatool Error: Can't assign \sXI : there is no key `Column11' in dat

Hier mein Code:
\usepackage{datatool} %Daten aus CSV lesen
\DTLnewdbonloadfalse
\DTLsetseparator{	} %Trennzeichen zwischen Werten in den CSV Dateien
\DTLloaddb[noheader]{tabelle}{einetabelle.csv}
\DTLloaddb[noheader]{tabelle}{anderetabelle.csv}

\noindent
\begin{table}[H]
\tiny
\centering
\caption{Überschrift}
\begin{tabularx}{1.3\textheight}{l X X X X X X X X X X}
\shortstack{$Testschritt$\\ \null}&\shortstack{$U_{mean}$\\$in~V$}&\shortstack{$I_{mean}$\\$in~A$}&\shortstack{$I_{Block}$\\$in~A$}&\shortstack{$M_{mean_{U1}}$\\$in~Nm$}&\shortstack{$M_{mean_{U2}}$\\$in~Nm$}&\shortstack{$M_{mean_{U3}}$\\$in~Nm$}&\shortstack{$M_{Block}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U1}}}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U2}}}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U3}}}$\\$in~Nm$}
\tabularnewline
\hline
\DTLforeach{tabelle}{\sI=Column1,\sII=Column2,\sIII=Column3,\sIV=Column4,\sV=Column5,\sVI=Column6,\sVII=Column7,\sVIII=Column8,\sIX=Column9,\sX=Column10,\sXI=Column11}{%
  \sI&\sII&\sIII&\sIV&\sV&\sVI&\sVII&\sVIII&\sIX&\sX&\sXI%
  \DTLiflastrow{}{\tabularnewline}%
  }
\end{tabularx}
\end{table}

Wie gesagt, wenn ich sXI und \sXI=Column11 lösche macht er alles wie gewünscht nur die letzte Spalte ist dann nicht mit Werten befüllt und ich weiß nicht wieso es so nicht klappt ...

Danke

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Dein Code ist bei mir nicht lauffähig. Ich bekomme mit ihm als erstes die Fehlermeldung: !LaTeX Error: \usepackage before \documentclass

ionas
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 20. Okt 2015, 16:27

Beitrag von ionas »

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{datatool} %Daten aus CSV lesen
\usepackage{tabularx}
\usepackage{pdflscape}
\DTLnewdbonloadfalse
\DTLsetseparator{   } %Trennzeichen zwischen Werten in den CSV Dateien


\begin{document}
\begin{landscape}
\DTLnewdb{tabelle}
\DTLloaddb[noheader]{tabelle}{einetabelle.csv}
\DTLloaddb[noheader]{tabelle}{anderetabelle.csv}
\noindent
\begin{table}
\tiny
\centering
\caption{Überschrift}
\begin{tabularx}{1.3\textheight}{l X X X X X X X X X X}
\shortstack{$Testschritt$\\ \null}&\shortstack{$U_{mean}$\\$in~V$}&\shortstack{$I_{mean}$\\$in~A$}&\shortstack{$I_{Block}$\\$in~A$}&\shortstack{$M_{mean_{U1}}$\\$in~Nm$}&\shortstack{$M_{mean_{U2}}$\\$in~Nm$}&\shortstack{$M_{mean_{U3}}$\\$in~Nm$}&\shortstack{$M_{Block}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U1}}}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U2}}}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U3}}}$\\$in~Nm$}
\tabularnewline
\hline
\DTLforeach{tabelle}{\sI=Column1,\sII=Column2,\sIII=Column3,\sIV=Column4,\sV=Column5,\sVI=Column6,\sVII=Column7,\sVIII=Column8,\sIX=Column9,\sX=Column10,\sXI=Column11}{%
  \sI&\sII&\sIII&\sIV&\sV&\sVI&\sVII&\sVIII&\sIX&\sX&\sXI%
  \DTLiflastrow{}{\tabularnewline}%
  }
\end{tabularx}
\end{table}
\end{landscape}
\end{document}
Der Code funktioniert.
Kompiliert bei mir auch durch ... Ich weiß nicht, wo der Fehler in meinem speziellen Fall ist. Ich arbeite mit sehr vielen Variablen und Ebenen in den Dokumenten ...
Weitersuchen ... :-(

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Dir sollte eigentlich klar sein, dass der Code immer noch bei keinem anderen läuft - mangels der csv Dateien.

Irgendwie scheint es Probleme mit den Leerzeichen als Spaltentrenner zu geben. Bei mir werden mit diesem Spaltentrenner die ersten beiden Spalten der csv Dateien als eine gemeinsame Spalte aufgefasst, weshalb dann die letzte fehlt.

Folgendes, also mit ; als Spaltentrenner, funktioniert bei mir dagegen:
\begin{filecontents*}{einetabelle.csv}
1;2;3;4;5;6;7;8;9;10;11
\end{filecontents*}
\begin{filecontents*}{anderetabelle.csv}
a;b;c;d;e;f;g;h;i;j;k
\end{filecontents*}

\documentclass{scrartcl} 
\usepackage[utf8]{inputenc} 
\usepackage{datatool} %Daten aus CSV lesen 
\usepackage{tabularx} 
\usepackage{pdflscape} 
\DTLnewdbonloadfalse 
\DTLsetseparator{;} %Trennzeichen zwischen Werten in den CSV Dateien 


\begin{document} 
\begin{landscape} 
\DTLnewdb{tabelle}
\DTLloaddb[noheader]{tabelle}{einetabelle.csv} 
\DTLloaddb[noheader]{tabelle}{anderetabelle.csv} 
\noindent 
\begin{table} 
\tiny 
\centering 
\caption{Überschrift} 
\begin{tabularx}{1.3\textheight}{l X X X X X X X X X X} 
\shortstack{$Testschritt$\\ \null}&\shortstack{$U_{mean}$\\$in~V$}&\shortstack{$I_{mean}$\\$in~A$}&\shortstack{$I_{Block}$\\$in~A$}&\shortstack{$M_{mean_{U1}}$\\$in~Nm$}&\shortstack{$M_{mean_{U2}}$\\$in~Nm$}&\shortstack{$M_{mean_{U3}}$\\$in~Nm$}&\shortstack{$M_{Block}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U1}}}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U2}}}$\\$in~Nm$}&\shortstack{$M_{\Delta_{max_{U3}}}$\\$in~Nm$} 
\tabularnewline 
\hline 
\DTLforeach{tabelle}{\sI=Column1,\sII=Column2,\sIII=Column3,\sIV=Column4,\sV=Column5,\sVI=Column6,\sVII=Column7,\sVIII=Column8,\sIX=Column9,\sX=Column10,\sXI=Column11}{% 
   \sI&\sII&\sIII&\sIV&\sV&\sVI&\sVII&\sVIII&\sIX&\sX&\sXI% 
   \DTLiflastrow{}{\tabularnewline}% 
   } 
\end{tabularx} 
\end{table} 
\end{landscape} 
\end{document} 

Antworten