Bug Tracker
I’m currently working on a major new version of the datatool package. This may take a while. Please be patient. (Experimental version available for testing.)
ID | 164🔗 |
---|---|
Date: | 2020-06-28 12:59:22 |
Status | Open Sign in if you want to bump this report. |
Category | datatool |
Version | v2.32 |
Summary | Updating currentrow does not work as expected |
Sign in to subscribe to notifications about this report.
Description
I try to create a dynamic project database which is updated in each run of LuaLaTeX and exported to a file. In the next run, the database is loaded from the file.Starting from scratch (i.e. without any db-file), the database is produced and exported as expected. But in the second run, all updated row entries get modified to the entries of the last row in the database.
The index for currentrow is obtained correctly, but somehow the changes are distributed to the preceeding rows.
I am not sure if this is a bug or if I have missed something within datatool. Thanks!
MWE
Download (2.03K)
\documentclass[a4paper,10pt]{article} \usepackage[verbose,separator=;]{datatool} \usepackage{csquotes} \usepackage[english]{babel} \usepackage[top=2cm,bottom=2cm,left=2.5cm,right=2cm]{geometry} \usepackage{fontspec} % numbering of projects \newcounter{project} \setcounter{project}{0} \newcommand{\prepro}{P} \renewcommand{\theproject}{\prepro\arabic{project}} % create project database \newcommand{\tabproj}{projects} \IfFileExists{projects.csv}{\DTLloaddb[]{\tabproj}{projects.csv}}% {\DTLnewdb{\tabproj}% \DTLaddcolumn{\tabproj}{ID}% \DTLaddcolumn{\tabproj}{project title}% \DTLaddcolumn{\tabproj}{leaders}% \DTLnewrow{\tabproj} \DTLnewdbentry{\tabproj}{ID}{P0} } % updating project database when project ID, title or leaders have changed \newcommand{\projtitle}{\relax} \newcommand{\projlead}{\relax} \NewDocumentCommand{\updateProjDB}{ m m m }{% \xdtlgetrowindex{\myrowidx}{\tabproj}{\dtlcolumnindex{\tabproj}{ID}}{#1} \ifx\myrowidx\dtlnovalue Index not found.\\ \DTLnewrow{\tabproj} {\dtlexpandnewvalue \DTLnewdbentry{\tabproj}{ID}{#1} \DTLnewdbentry{\tabproj}{project title}{#2} \DTLnewdbentry{\tabproj}{leaders}{#3} } \else Changing entry with index: \myrowidx\\ \dtlgetrow{\tabproj}{\myrowidx}% \dtlreplaceentryincurrentrow{#2}{\dtlcolumnindex{\tabproj}{project title}} \dtlreplaceentryincurrentrow{#3}{\dtlcolumnindex{\tabproj}{leaders}} \dtlrecombine \fi } \begin{document} \DTLdisplaydb{\tabproj} \refstepcounter{project}\label{author1} \edef\projcount{\theproject} \edef\projtitle{Title 1} \edef\projlead{{author1,author2}} \updateProjDB{\projcount}{\projtitle}{\projlead} \DTLdisplaydb{\tabproj} \refstepcounter{project}\label{author3} \edef\projcount{\theproject} \edef\projtitle{Title 2} \edef\projlead{{author3,author4}} \updateProjDB{\projcount}{\projtitle}{\projlead} \DTLdisplaydb{\tabproj} \refstepcounter{project}\label{author5} \edef\projcount{\theproject} \edef\projtitle{Title 3} \edef\projlead{author5} \updateProjDB{\projcount}{\projtitle}{\projlead} \DTLdisplaydb{\tabproj} \DTLsavedb{\tabproj}{projects.csv} \end{document}
Evaluation
It looks like the user manual is incorrect where it claims the value is expanded. It isn’t. Since it could cause a problem for existing documents if I change the behaviour to match the documentation, I think it would be better if I introduce new commands that expand the value.
Since you only need one level of expansion, the following will work:
\expandafter\dtlreplaceentryincurrentrow\expandafter{#2}{\dtlcolumnindex{\tabproj}{project title}} \expandafter\dtlreplaceentryincurrentrow\expandafter{#3}{\dtlcolumnindex{\tabproj}{leaders}}
Comments
1 comment.
Add Comment
Page permalink: https://www.dickimaw-books.com/bugtracker.php?key=164
Date: 2020-06-30 19:49:00
Thanks, works perfectly!