Latest news 2024-10-15: New blog post: Tales for Our Times Book Launch.

Bug Tracker RSS feed

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.

🔗Comment from Markus
Date: 2020-06-30 19:49:00

Thanks, works perfectly!

Replying to Comment #64:

Name (optional):

Are you human? Please confirm the bug report ID (which can be found at the top of this page) or login if you have an account.

Comment:


You can use the following markup:

Block:

[pre]Displayed verbatim[/pre]
[quote]block quote[/quote]

In line:

[tt]code[/tt]
[file]file/package/class name[/file]
[em]emphasized text[/em]
[b]bold text[/b]
[url]web address[/url] [sup]superscript[/sup]
[sub]subscript[/sub]

Ordered list:
[ol]
[li]first item[/li]
[li]second item[/li]
[/ol]

Unordered list:
[ul]
[li]first item[/li]
[li]second item[/li]
[/ul]

You can use the Preview button to review your message formatting before submitting.


Add Comment

Name (optional):

Are you human? Please confirm the bug report ID (which can be found at the top of this page) or login if you have an account.

Comment:


You can use the following markup:

Block:

[pre]Displayed verbatim[/pre]
[quote]block quote[/quote]

In line:

[tt]code[/tt]
[file]file/package/class name[/file]
[em]emphasized text[/em]
[b]bold text[/b]
[url]web address[/url] [sup]superscript[/sup]
[sub]subscript[/sub]

Ordered list:
[ol]
[li]first item[/li]
[li]second item[/li]
[/ol]

Unordered list:
[ul]
[li]first item[/li]
[li]second item[/li]
[/ul]

You can use the Preview button to review your message formatting before submitting.

Page permalink: https://www.dickimaw-books.com/bugtracker.php?key=164