Seite 1 von 1

DTLforeach - nur 10 Spalten möglich?

Verfasst: Do 19. Nov 2015, 12:01
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

Verfasst: Fr 20. Nov 2015, 01:40
von esdd
Dein Code ist bei mir nicht lauffähig. Ich bekomme mit ihm als erstes die Fehlermeldung: !LaTeX Error: \usepackage before \documentclass

Verfasst: Fr 20. Nov 2015, 08:17
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 ... :-(

Verfasst: Fr 20. Nov 2015, 10:13
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}