
Eu tenho muitos arquivos CSV separados por tabulações que gostaria de converter em tabelas automaticamente no ambiente tabular do látex. As tabelas são nomeadas:registro_%onde % pode ser um dos símbolos \in {at,be,fr,....}. Por exemplo, cada arquivo se parece com abaixo:
accuracy timepred timelearn timelearn2 timelearn4 rmsetrain
0.987747 0.532 2.44 nan nan 0.987676
0.987747 0.528 2.396 nan nan 0.987676
0.987747 0.544 2.408 nan nan 0.987676
0.987747 0.496 2.388 nan nan 0.987676
0.987747 0.436 2.432 nan nan 0.987676
0.987747 0.428 2.444 nan nan 0.987676
0.987747 0.464 2.452 nan nan 0.987676
0.987747 0.428 2.452 nan nan 0.987676
0.987747 0.464 2.46 nan nan 0.987676
0.987747 0.484 2.448 nan nan 0.987676
Tentei o código abaixo que infelizmente não funciona!
Ao executar o código acima, recebo um erro:\documentclass{article} \usepackage{xparse}% http://ctan.org/pkg/xparse \usepackage{csvsimple} \usepackage{etoolbox}% http://ctan.org/pkg/etoolbox \usepackage{array} \usepackage{pgfplotstable} \newcounter{listtotal}\newcounter{listcntr}% \NewDocumentCommand{\names}{o}{% \setcounter{listtotal}{0}\setcounter{listcntr}{-1}% \renewcommand*{\do}[1]{\stepcounter{listtotal}}% \expandafter\docsvlist\expandafter{\namesarray}% \IfNoValueTF{#1} {\namesarray}% \names {% \names[] \renewcommand*{\do}[1]{\stepcounter{listcntr}\ifnum\value{listcntr}=#1\relax##1\fi}% \expandafter\docsvlist\expandafter{\namesarray}}% }
\begin{document} \newcommand{\namesarray}{at,br,cz,dk,fi,ie,nb,no,pt,se,be,ch,de,es,fr,it,nl,pl,ru,uk}% \foreach \i in {0,...,20}{ \newcommand{\name}{\names[\i]} \name \csvautotabular[separator=tab]{logs/log_\names[\i]} \par } \end{document}
! Package csvsimple Error: File 'logs/log_\names [0]' not existent, not readable, or empty!.
O mesmo exemplo funciona codificando o símbolo da seguinte forma:
\csvautotabular[separator=tab]{logs/log_at} \par
no lugar de
\csvautotabular[separator=tab]{logs/log_\names[\i]} \par
Carreguei a solução funcional codificando no seguinte link: goo.gl/nbI5TQ
Acredito que o problema é que a macro \i é expandida e o ambiente tabular não consegue expandir \names. Mas eu não tenho certeza. É possível expandir a macro \names[\i] como um grupo e não apenas \i?
Eu apreciaria qualquer tipo de ajuda mínima para resolver meu problema.
Obrigado :)
Responder1
O código parece excessivamente complexo. Se você deseja apenas percorrer a lista de arquivos, acho que você só precisa de um loop from etoolbox
, digamos, e do comando relevante from csvsimple
.
Por exemplo com logs/log_at
:
accuracy timepred timelearn timelearn2 timelearn4 rmsetrain
0.987747 0.532 2.44 nan nan 0.987676
0.987747 0.528 2.396 nan nan 0.987676
0.987747 0.544 2.408 nan nan 0.987676
0.987747 0.496 2.388 nan nan 0.987676
0.987747 0.436 2.432 nan nan 0.987676
0.987747 0.428 2.444 nan nan 0.987676
0.987747 0.464 2.452 nan nan 0.987676
0.987747 0.428 2.452 nan nan 0.987676
0.987747 0.464 2.46 nan nan 0.987676
0.987747 0.484 2.448 nan nan 0.987676
e logs/log_br
:
accuracy timepred timelearn timelearn2 timelearn4 rmsetrain
0.987747 0.532 2.44 nan nan 0.987676
0.987747 0.528 2.396 nan nan 0.987676
0.987747 0.544 2.408 nan nan 0.987676
0.987747 0.496 2.388 nan nan 0.987676
0.987747 0.436 2.432 nan nan 0.987676
0.987747 0.428 2.444 nan nan 0.987676
0.987747 0.464 2.452 nan nan 0.987676
0.987747 0.428 2.452 nan nan 0.987676
0.987747 0.464 2.46 nan nan 0.987676
0.987747 0.484 2.448 nan nan 0.987676
O .tex
código
\documentclass{article}
\usepackage{csvsimple}
\usepackage{etoolbox}
\providecommand*\do{}
\begin{document}
\renewcommand*\do[1]{%
#1
\csvautotabular[separator=tab]{logs/log_#1}\par
}
\docsvlist{at,br}%,cz,dk,fi,ie,nb,no,pt,se,be,ch,de,es,fr,it,nl,pl,ru,uk}%
\end{document}
produz a seguinte saída
Observe que este código assume que os arquivos são chamados logs/log_<xx>.tex
ou que os arquivos são logs/log_<xx>
. Se eles tiverem uma extensão diferente, você precisará especificá-la.
Responder2
Esteja ciente que
\csvautotabular[separator=tab]
significa que você precisa usar tabulações em vez de espaços para separar itens dentro de uma linha do arquivo csv.a maneira como o TeX processa nomes de arquivos não é a mesma em todas as plataformas.
Por exemplo, ao usar o MiKTeX 2.9 no Windows 7, o TeX sempre assume a extensão de nome de arquivo ".tex" se nenhuma extensão de nome de arquivo for fornecida. Se o nome do arquivo em questão não tiver nenhuma extensão, você precisará fornecer o ponto (sem extensão) de qualquer maneira.
Por exemplo, se você deseja especificar o arquivo "log_at" no subdiretório "logs" do diretório atual, você precisa escrever./logs/log_at.
. (Se você especificar./logs/log_at
(sem ponto final), o (MiK)TeX procurará o arquivo "log_at.tex" no subdiretório "logs" do diretório atual.