如何使用 \DTLloaddb 包基于 csv 文件创建表?

如何使用 \DTLloaddb 包基于 csv 文件创建表?

我是 Latex 新手,遇到了一些问题。我已成功读取 .csv 文件:

,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20,w21,w22,w23,w24
,25,23,13,14,15,39,36,4,37,11,26,13,34,39,40,22,33,32,9,5
,56,31,45,31,38,41,59,26,,44,52,33,,42,,28,51,41,28,36

并使用如何使用 datatool 包读取 CSV 文件以便在表中使用?得到这个输出:

图片 1

但现在我必须像这样格式化表格:

图片 2

我不知道该怎么做,因为首先我不知道如何设置表格可以放入纸张的边距(我使用了几何包来使页面横向显示,但这还不够)。

然后每个单元格包含出发时间(小时和分钟),均为两位数字,但有时我没有两位数字,只有一位数字,所以我必须切换,例如从12 4 -> 12 04

最后,每个数据字段表示特定小时内的出发时间,例如,w5 列中的数字 25 表示出发时间为 5:25,我不知道如何这样格式化。我试过这样做,但我认为这不是正确的方法:

\ifthenelse{\equal{\insertbyname{w5}}{}}{\insertbyname{w5}&}{{\bf 05} \insertbyname{w5} &}

如果有人能帮助我我会非常高兴。

答案1

由于您的表格非常宽,唯一真正的选择是通过 缩放它以适合页面的整个宽度\resizebox{\linewidth}{!}{\DTLdisplaydb{myDB}}。我不会包含完整的图像,因为它很难读懂,但这是表格的左侧和右侧,使用 绘制框架\usepackage[showframe]{geometry}

在此处输入图片描述... 在此处输入图片描述


就访问数据库而言,您需要使用键来定位特定值。因此,假设您想定位列中的行值1,并使用列的w5行值:2w6

\GetValueOfColumnAtRow{\myValue}{w5}{1}
\GetValueOfColumnAtRow{\myValue}{w6}{2}

并且值存储在 中\myValue。因此,使用下面的代码,我们可以获得:

在此处输入图片描述


要遍历数据库的每一行,可以使用\DTLforeach。以下代码展示了如何处理数据的前三列以产生结果:

在此处输入图片描述

笔记:

  • 由于这个问题更多的是关于从数据库访问数据,因此我没有解决格式化表格的具体问题。这些问题应该放在一个单独的问题中,因为它们与数据库访问并非无关。

代码:

\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{datatool}
\usepackage{graphicx}

\newcommand*{\GetValueOfColumnAtRow}[3]{%
    % #1 = csname of where to store the result
    % #2 = key for column
    % #3 = row number
    \DTLgetvalue{#1}{myDB}{#3}{\dtlcolumnindex{myDB}{#2}}%
}%

\begin{document}
    \DTLloaddb{myDB}{MyData.csv}
    \noindent
    \resizebox{\linewidth}{!}{\DTLdisplaydb{myDB}}

    \bigskip\noindent
    \GetValueOfColumnAtRow{\myValue}{w5}{1}
    The value of w5 in row 1 is \myValue.
    \par\noindent
    \GetValueOfColumnAtRow{\myValue}{w6}{2}
    The value of w6 in row 2 is \myValue.

    \bigskip
    \begin{tabular}{l l l l l}
            5 to & 6 to & 7 to \\
            6am  & 7am  & 8am  \\\hline
    \DTLforeach{myDB}{%
        \WFive=w5,
        \WSix=w6,
        \WSeven=w7%
        }{%
            5:\WFive &
            6:\WSix &
            7:\WSeven &
            \\
    }%
    \end{tabular}
\end{document}

相关内容