# The datatool package is not reading the csv file

I have the csv file as follows:

The csv file in sublime looks like this:

Now the code reads each quote and author in the quote environment at the footer in the center. But it doesn't print the text at all. What is the error?

Here is the code:

%Template for Technical Document
\documentclass{book}
\usepackage{graphicx}
\usepackage[explicit]{titlesec}
\usepackage{tikz}
%\renewcommand{\chaptername}{Article}
\usepackage{fancyhdr}
\usepackage{datatool}
% Can also use centering, or hcentering

\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[LE,RO]{\tikz[baseline={(0,0)},anchor=center]
\node[label={center:\thepage}]{\includegraphics[scale=.25]{apple.jpg}};}%
\renewcommand{\footrulewidth}{0.4pt}
}

\DTLforeach{quotes}{\q=quote,\a=author}{

\fancypagestyle{myfancy}{
\fancyhf{}
\fancyfoot[LE,RO]{\tikz[baseline={(0,0)},anchor=center] \node[label={center:\thepage}]{\includegraphics[scale=.25]{apple}};}%
\fancyfoot[cf]{\begin{quote}{\a}
\q
\end{quote}
}
\renewcommand{\footrulewidth}{0.4pt}
}
}

\usepackage{microtype}

\usepackage{afterpage}
\let\oldcleardoublepage\cleardoublepage
\renewcommand{\cleardoublepage}{\afterpage{\thispagestyle{empty}}\oldcleardoublepage}

\pagestyle{myfancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}

\begin{document}
\chapter{Install Backtrack on an Android Device}
\section{What is Backtrack?}
BackTrack is a distribution designed by Jason Dennis based on the Ubuntu Linux distribution aimed at digital forensics and penetration testing use. BackTrack provides users with easy access to a comprehensive and large collection of security-related tools ranging from port scanners to Security Audit. Support for Live CD and Live USB functionality allows users to boot BackTrack directly from portable media without requiring installation, though permanent installation to hard disk and network is also an option.\par
\section{Security Tools in Backtrack}
BackTrack includes many well known security tools including:
\begin{itemize}
\item Metasploit for integration
\item Wi-Fi drivers supporting monitor mode (rfmon mode) and packet injection
\item Aircrack-ng
\item Gerix Wifi Cracker
\item Kismet
\item Nmap
\item Ophcrack
\item Ettercap
\item Wireshark (formerly known as Ethereal)
\item BeEF (Browser Exploitation Framework)
\item Hydra
\item OWASP Mantra Security Framework, a collection of hacking tools, add-ons and scripts based on FirefoX.
\item Cisco OCS Mass Scanner, a very reliable and fast scanner for Cisco routers with telnet and enabling of a default password.
\end{itemize}

\section{Installing Backtrack on Android Device}
\subsection{Tools Required}
\begin{enumerate}
\item Backtrack 5 ARM.\\
Download Backtrack 5 ARM from Backtrack official site. Backtrack with ARM architecture only on Backtrack 5 version. ARM architecture not available for Backtrack 5 R1, Backtrack 5 R2, and Backtrack 5 R3.
\item Rooted android device \\
Why rooted android device ? Because we need install some application that need Android to be root
\item Busybox, Superuser, Terminal Emulator, and AndroidVNC. \\
You can download search and all of them on Google Play. BusyBox is installer and uninstaller Android program, Superuser is superuser rights manager for Android, Terminal Emulator is Android's built-in Linux command line shell program, and AndroidVNC is a VNC viewer for Android.
\end{enumerate}
\subsection{Installation}
\begin{enumerate}
\item Extract BT5-GNOME-ARM.7z to folder, for example "BT5" folder and then put on device root directory.
\item Open Terminal Emulator on device then go to BT5 folder using the command \verb+ cd sdcard/BT5 +
\item Then run this following command \verb+ su + and \verb+ sh bootbt + and you will see \verb+ root@localhost +
\item Now lets run Backtrack GUI with VNC viewer \verb+startvnc+
\item To connect wth VNC we must know the port where VNC listening. Run \verb+netstat -anpt+ and remember the port where VNC listening. In this case the port is 59016. Open AndroidVNC and fill the form like this: \\
Nickname : BT5\\
Port     : 5901 \\
\item Connect it and you will see Backtrack 5 interface \par
\textit{Remember! Some of the Backtrack tools can't work properly and do it for your own risk. I hope you can Install Backtrack on Android device without any problems, tell me if you get problems.}
\end{enumerate}
\end{document}


The csv file:

   quote,author
I think everybody in this country should learn how to program a computer because it teaches you how to think,Steve Jobs
Computer Science is no more about computers than astronomy is about telescopes,Edsger W. Dijkstra
The computer was born to solve problems that did not exist before,Bill Gates
A computer would deserve to be called intelligent if it could deceive a human into believing that it was human,Alan Turing
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity,Dennis Ritchie
Imagination is more important than knowledge.  For knowledge is limited, whereas imagination embraces the entire world, stimulating progress, giving birth to evolution,Albert Einstein
The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge,Stephen Hawking
The more you know, the more you realize you know nothing,Socrates
Tell me and I forget.  Teach me and I remember.  Involve me and I learn.,Benjamin Franklin
Real knowledge is to know the extent of one’s ignorance.,Confucius
I do not fear computers. I fear lack of them.,Isaac Asimov


Here is the new updated code:

%Template for Technical Document
\documentclass{book}
\usepackage{graphicx}
\usepackage[explicit]{titlesec}
\usepackage{tikz}
\usepackage{suffix}
%\renewcommand{\chaptername}{Article}
\usepackage{fancyhdr}
% Can also use centering, or hcentering
\usepackage{datatool}
\usepackage[printwatermark]{xwatermark}
\usepackage{xcolor}
\usepackage{transparent}

\usetikzlibrary{shapes.misc,arrows}
\newcommand\titlebar{%
\tikz[baseline,trim left=0.5cm,trim right=2.5cm] {%
\node [
text = red!70!green,
anchor= base east,
minimum height=3.5ex] (a) at (2.5cm,0.6ex) {%
};
\path[fill=red!70!blue] (a.east) circle (.5ex);
\draw[color=red!70!blue, thick,rounded corners=1ex] (a.east) |- (\textwidth+3cm,-0.75ex);
}%
}

\newcommand\subtitlebar{%
\tikz[baseline,trim left=1cm,trim right=3.05cm] {%
\node[
text = red!70!green,
anchor= base east,
minimum height=3.5ex] (b) at (3.05cm,0.6ex) {%
};
\path[fill=red!70!blue] (b.east) circle (.5ex);
\draw[color=red!70!blue, thick,rounded corners=1ex] (b.east) |- (\textwidth+2cm,-0.75ex);
}%
}

\titleformat{\subsection}{\normalfont\sf}{\subtitlebar}{0.2cm}{\textcolor{blue!60!green}{#1}}
\titlespacing*{\subsection}{-2cm}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\titlespacing*{name=\subsection,numberless}{0cm}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\renewcommand*{\thesubsection}{\arabic{subsection}}

\titleformat{\section}{\large\sf}{\titlebar}{0.25cm}{\textcolor{blue!60!green}{#1}}
\titlespacing*{\section}{-2.15cm}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\titlespacing*{name=\section,numberless}{0cm}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\renewcommand*{\thesection}{\arabic{section}}

\newcommand\chapterauthor[1]{\authortoc{#1}\printchapterauthor{#1}}
\WithSuffix\newcommand\chapterauthor*[1]{\printchapterauthor{#1}}
\makeatletter
\newcommand{\printchapterauthor}[1]{%
{\parindent0pt\vspace*{-25pt}%
\par\nobreak\vspace*{35pt}}
}
\newcommand{\authortoc}[1]{%
\protect\contentsline{chapter}%
{\hskip1.3em\mdseries\scshape\protect\scriptsize#1}{}{}}
}
\makeatother

\titleformat{\chapter}[display]
{\bfseries\Large}
%  {\filright\MakeUppercase{\chaptertitlename}\Huge\thechapter}
{}
{1ex}
{\titlerule\vspace{1ex}\filcenter #1}
[\vspace{1ex}\titlerule]

\DTLforeach{quotes}{
\q=quote, \a=author}{
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[LE,RO]{\tikz[baseline={(0,0)},anchor=center]
\node[label={center:\thepage}]{\includegraphics[scale=.25]{apple}};}%
\fancyfoot[cf]{\q}
\renewcommand{\footrulewidth}{0.4pt}
}

\fancypagestyle{myfancy}{
\fancyhf{}
\fancyfoot[LE,RO]{\tikz[baseline={(0,0)},anchor=center] \node[label={center:\thepage}]{\includegraphics[scale=.25]{apple}};}%
\fancyfoot[cf]{\q}
\renewcommand{\footrulewidth}{0.4pt}
}
}

\usepackage{microtype}

\usepackage{afterpage}
\let\oldcleardoublepage\cleardoublepage
\renewcommand{\cleardoublepage}{\afterpage{\thispagestyle{empty}}\oldcleardoublepage}

\pagestyle{myfancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}

\newwatermark[allpages,color=red!50,scale=3,xpos=0,ypos=0]{\transparent{0.4}\includegraphics[scale=.25]{logo}}

\begin{document}
\chapter{Install Backtrack on an Android Device}
\chapterauthor*{K.DINESH KUMAR \par II Year B.Tech CSE}
\section{What is Backtrack?}
BackTrack is a distribution designed by Jason Dennis based on the Ubuntu Linux distribution aimed at digital forensics and penetration testing use. BackTrack provides users with easy access to a comprehensive and large collection of security-related tools ranging from port scanners to Security Audit. Support for Live CD and Live USB functionality allows users to boot BackTrack directly from portable media without requiring installation, though permanent installation to hard disk and network is also an option.\par
\section{Security Tools in Backtrack}
BackTrack includes many well known security tools including:
\begin{itemize}
\item Metasploit for integration
\item Wi-Fi drivers supporting monitor mode (rfmon mode) and packet injection
\item Aircrack-ng
\item Gerix Wifi Cracker
\item Kismet
\item Nmap
\item Ophcrack
\item Ettercap
\item Wireshark (formerly known as Ethereal)
\item BeEF (Browser Exploitation Framework)
\item Hydra
\item OWASP Mantra Security Framework, a collection of hacking tools, add-ons and scripts based on FirefoX.
\item Cisco OCS Mass Scanner, a very reliable and fast scanner for Cisco routers with telnet and enabling of a default password.
\end{itemize}

\section{Installing Backtrack on Android Device}
\subsection{Tools Required}
\begin{enumerate}
\item Backtrack 5 ARM.\\
Download Backtrack 5 ARM from Backtrack official site. Backtrack with ARM architecture only on Backtrack 5 version. ARM architecture not available for Backtrack 5 R1, Backtrack 5 R2, and Backtrack 5 R3.
\item Rooted android device \\
Why rooted android device ? Because we need install some application that need Android to be root
\item Busybox, Superuser, Terminal Emulator, and AndroidVNC. \\
You can download search and all of them on Google Play. BusyBox is installer and uninstaller Android program, Superuser is superuser rights manager for Android, Terminal Emulator is Android's built-in Linux command line shell program, and AndroidVNC is a VNC viewer for Android.
\end{enumerate}
\subsection{Installation}
\begin{enumerate}
\item Extract BT5-GNOME-ARM.7z to folder, for example "BT5" folder and then put on device root directory.
\item Open Terminal Emulator on device then go to BT5 folder using the command \verb+ cd sdcard/BT5 +
\item Then run this following command \verb+ su + and \verb+ sh bootbt + and you will see \verb+ root@localhost +
\item Now lets run Backtrack GUI with VNC viewer \verb+startvnc+
\item To connect wth VNC we must know the port where VNC listening. Run \verb+netstat -anpt+ and remember the port where VNC listening. In this case the port is 59016. Open AndroidVNC and fill the form like this: \\
Nickname : BT5\\
Port     : 5901 \\
\item Connect it and you will see Backtrack 5 interface \par
\textit{Remember! Some of the Backtrack tools can't work properly and do it for your own risk. I hope you can Install Backtrack on Android device without any problems, tell me if you get problems.}
\end{enumerate}
\end{document}


The apple:

• Yes my goal is the print different quotes on each page and I have create an excel document, saved it as .csv and thats my first image in the question "the quotes.csv file" – subham soni Feb 2 '14 at 6:08
• Question edited @jon – subham soni Feb 2 '14 at 6:11
• Sorry but I don't understand by "actual .csv" file – subham soni Feb 2 '14 at 6:51
• First thing I would do is just have two columns, i.e. put all quotes in column A of the spreadsheet, and all authors in column B. Not sure whether this helps but it is always better to have clean data to start with! – vaettchen Feb 2 '14 at 7:19
• Of course nothing gets printed, since your parsing of the .csv only sets the header/footer, over and over for each quote. Secondly, and most importantly, you define the keys to be ,quote,author, meaning the columns of importance is 2 and 3, yet your .csv shows columns 2 and 3 as empty. You would need quote,,,,,,,,,,,,,,,,,author, but it's better to remove all the unnecessary columns so you can just use quote,author. Fix that first. – Werner Feb 2 '14 at 7:54

Some of the material in your example is not strictly relevant to the problem of getting a quotation printed every page, so I removed it. But you can use the package everypage with datatool to do what you want. Something like this will continuously cycle through the 11 quotations in the .csv and print one at the bottom:

\documentclass{book}
\usepackage{filecontents}
\begin{filecontents}{quotations.csv}
I\space think everybody in this country should learn how to program a computer because it teaches you how to think.; Steve Jobs
Computer Science is no more about computers than astronomy is about telescopes.; Edsger W. Dijkstra
The computer was born to solve problems that did not exist before.; Bill Gates
A\space computer would deserve to be called intelligent if it could deceive a human into believing that it was human.; Alan Turing
UNIX is basically a simple operating system but you have to be a genius to understand the simplicity.; Dennis Ritchie
Imagination is more important than knowledge.  For knowledge is limited, whereas imagination embraces the entire world, stimulating progress, giving birth to evolution.; Albert Einstein
The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.; Stephen Hawking
The more you know, the more you realize you know nothing.; Socrates
Tell me and I forget.  Teach me and I remember.  Involve me and I learn.; Benjamin Franklin
Real knowledge is to know the extent of one's ignorance.; Confucius
I~do not fear computers. I fear lack of them.; Isaac Asimov
\end{filecontents}

\usepackage[T1]{fontenc}
\usepackage[a4paper,
% NOTE: margins at foot of page need to be calibrated to suit the size
% of 'apple.jpg'
margin=1in, includefoot, footskip=1in,
]{geometry}

\usepackage{lipsum}       % dummy text
\usepackage{datatool}     % access .csv
\DTLsetseparator{;}       % use semi-colon as delimter (commas use in
% quotations)

\renewcommand{\footrulewidth}{0.4pt}
\fancypagestyle{myfancy}{
\fancyhf{}
% black box in place of image;
% replace with \includegraphics[<options>]{apple}
\fancyfoot[LE,RO]{\rule{2cm}{2cm}}
% print the value of \Value in footer
\fancyfoot[cf]{\Value}
}

% Create, initialize our counter;
\newcounter{thepagenum}
\setcounter{thepagenum}{0}

% Set highest row number to access
% '11' here because there are 11 rows in the .csv
\def\pagelimit{11}

% Set the size of the 'box' into which we shall put the quotation and
% author.  The width of the box should be at least 4.5cm smaller than
% the \textwidth *IF* the size of the 'apple.jpg' is 2 cm wide. We set
% the height of the \parbox to 2cm *IF* that is the height of
% 'apple.jpg'
\newcommand{\setquoteandauthor}{%
\parbox[b][2cm][c]{\dimexpr\textwidth-4.5cm\relax}{\centering
\emph{\QValue} --- \AValue}}%

% At every new page:
% (1) Test value of 'thepagenum'; reset counter when the
% \pagelimit is reached.
% (2) Access the .csv and store the respective quotation in
% \QValue.
% (3) Print \QValue in footer.
\ifnum\pdfstrcmp{\arabic{thepagenum}}{\pagelimit}=0
\setcounter{thepagenum}{0}%
\else
\fi
\stepcounter{thepagenum}
\DTLgetvalue{\QValue}{quotes}{\arabic{thepagenum}}{1}%
% Author info too?
\DTLgetvalue{\AValue}{quotes}{\arabic{thepagenum}}{2}%
%  \fancyfoot[cf]{\QValue'' --- \AValue}%
\fancyfoot[cf]{\setquoteandauthor}}

\pagestyle{myfancy}

\begin{document}

\chapter{Install Backtrack on an Android Device}
\section{What is Backtrack?}

BackTrack is \lipsum[1-5]

\section{Security Tools in Backtrack}

\lipsum[1-5]

\section{Installing Backtrack on Android Device}
\subsection{Tools Required}

\lipsum[6-8]

\subsection{Installation}

\lipsum[1-60]

\lipsum[1-60]

\end{document}


Some things to note:

• Currently, no quotation is printed on pages where \chapter is used. I'm not sure what the desired behaviour is. (Also, those pages still 'step' the counter, so you end up skipping quotations on those pages.) Should there also be a quotation on pages where a new chapter starts..?

• I changed the delimiter to a ; (see \DTLsetseparator{;}) because some of the quotations themselves have commas.

• For some reason, which I haven't explored, when a quotation begins with a one-letter word (such as 'I' or 'A'), the space between it and the following word is lost. (Cf. lines 1, 4, and 11 in the .csv.)

Changes:

• Quotation and author are now used at the bottom of each page.

• Space is made so that a small image can be set in the footer. (Currently, I have it set to draw a black box 2 cm by 2 cm.) This requires setting proper settings for the bottom of the page in geometry and setting the quotation in a box that leaves space for the image (see \setquoteandauthor).

• I have update by csv file as well – subham soni Feb 3 '14 at 5:20
• @subhamsoni -- You are putting too much extra stuff into your updated example. Please read about what a minimal example (or here) is, and then update your question accordingly. For example, since the format of how sectional headings appear has nothing to do with getting a quotation printed in the footer of a page, this is not relevant to the question and should be omitted from the example. – jon Feb 3 '14 at 5:37
• Yes your code works perfectly but it should come along with the author and there are so many assumptions you have made as well regarding the image in the footer and others @jon – subham soni Feb 3 '14 at 5:53
• I will try to improve on that @jon – subham soni Feb 3 '14 at 6:15
• @subhamsoni -- FYI, I appreciate (now) the reason for why you included a less minimal document in your question, which is certainly the right spirit. Ironically, it can have the opposite effect: too much code and too many \usepackages that are unlikely to relate to the question or problem may well discourage others from trying to untangle the mess. Quicker results are often gained when the question and relevant code are kept to a minimum. – jon Feb 3 '14 at 7:00