When DTLforeach is used with a condition, DTLiflastrow does not work












1















In the following code, my dataset is {1,2,3,4}.



With no filter, DTLiffirstrow will return true at "1" and DTLiflastrow will return true at "4".
This is what I expect from these functions.



When I filter the dataset to {2,3},
DTLiffisrtrow returns true at "2". Perfect.



But DTLiflastrow is always false. I would expect it to return true for the value "3".



documentclass{article}

usepackage{datatool}

DTLnewdb{table}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{1}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{2}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{3}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{4}


begin{document}


DTLforeach*%
[DTLisclosedbetween{COne}{2}{3}]%
{table}%
{COne=C1}%
{%
COne%
DTLiffirstrow{FIRST}{}%
DTLiflastrow{LAST}{}%
\%
}%

end{document}


How could I detect the last row of a filtered set of data?










share|improve this question























  • There's no way for datatool to know it's on the last filtered row on a single pass. It would require two passes: first to find out which is the last row of the filtered set and the second to compare the current row with that value. (datatool knows how many rows the database has but the last row may be filtered. DTLiflastrow can only compare the current row index with the total number of rows.)

    – Nicola Talbot
    yesterday
















1















In the following code, my dataset is {1,2,3,4}.



With no filter, DTLiffirstrow will return true at "1" and DTLiflastrow will return true at "4".
This is what I expect from these functions.



When I filter the dataset to {2,3},
DTLiffisrtrow returns true at "2". Perfect.



But DTLiflastrow is always false. I would expect it to return true for the value "3".



documentclass{article}

usepackage{datatool}

DTLnewdb{table}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{1}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{2}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{3}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{4}


begin{document}


DTLforeach*%
[DTLisclosedbetween{COne}{2}{3}]%
{table}%
{COne=C1}%
{%
COne%
DTLiffirstrow{FIRST}{}%
DTLiflastrow{LAST}{}%
\%
}%

end{document}


How could I detect the last row of a filtered set of data?










share|improve this question























  • There's no way for datatool to know it's on the last filtered row on a single pass. It would require two passes: first to find out which is the last row of the filtered set and the second to compare the current row with that value. (datatool knows how many rows the database has but the last row may be filtered. DTLiflastrow can only compare the current row index with the total number of rows.)

    – Nicola Talbot
    yesterday














1












1








1








In the following code, my dataset is {1,2,3,4}.



With no filter, DTLiffirstrow will return true at "1" and DTLiflastrow will return true at "4".
This is what I expect from these functions.



When I filter the dataset to {2,3},
DTLiffisrtrow returns true at "2". Perfect.



But DTLiflastrow is always false. I would expect it to return true for the value "3".



documentclass{article}

usepackage{datatool}

DTLnewdb{table}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{1}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{2}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{3}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{4}


begin{document}


DTLforeach*%
[DTLisclosedbetween{COne}{2}{3}]%
{table}%
{COne=C1}%
{%
COne%
DTLiffirstrow{FIRST}{}%
DTLiflastrow{LAST}{}%
\%
}%

end{document}


How could I detect the last row of a filtered set of data?










share|improve this question














In the following code, my dataset is {1,2,3,4}.



With no filter, DTLiffirstrow will return true at "1" and DTLiflastrow will return true at "4".
This is what I expect from these functions.



When I filter the dataset to {2,3},
DTLiffisrtrow returns true at "2". Perfect.



But DTLiflastrow is always false. I would expect it to return true for the value "3".



documentclass{article}

usepackage{datatool}

DTLnewdb{table}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{1}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{2}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{3}
DTLnewrow{table}
DTLnewdbentry{table}{C1}{4}


begin{document}


DTLforeach*%
[DTLisclosedbetween{COne}{2}{3}]%
{table}%
{COne=C1}%
{%
COne%
DTLiffirstrow{FIRST}{}%
DTLiflastrow{LAST}{}%
\%
}%

end{document}


How could I detect the last row of a filtered set of data?







datatool






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 22 at 20:43









Joseph MarieJoseph Marie

1588




1588













  • There's no way for datatool to know it's on the last filtered row on a single pass. It would require two passes: first to find out which is the last row of the filtered set and the second to compare the current row with that value. (datatool knows how many rows the database has but the last row may be filtered. DTLiflastrow can only compare the current row index with the total number of rows.)

    – Nicola Talbot
    yesterday



















  • There's no way for datatool to know it's on the last filtered row on a single pass. It would require two passes: first to find out which is the last row of the filtered set and the second to compare the current row with that value. (datatool knows how many rows the database has but the last row may be filtered. DTLiflastrow can only compare the current row index with the total number of rows.)

    – Nicola Talbot
    yesterday

















There's no way for datatool to know it's on the last filtered row on a single pass. It would require two passes: first to find out which is the last row of the filtered set and the second to compare the current row with that value. (datatool knows how many rows the database has but the last row may be filtered. DTLiflastrow can only compare the current row index with the total number of rows.)

– Nicola Talbot
yesterday





There's no way for datatool to know it's on the last filtered row on a single pass. It would require two passes: first to find out which is the last row of the filtered set and the second to compare the current row with that value. (datatool knows how many rows the database has but the last row may be filtered. DTLiflastrow can only compare the current row index with the total number of rows.)

– Nicola Talbot
yesterday










1 Answer
1






active

oldest

votes


















1














This is not a bug, it's a feature !



See the doc (datatool-code.pdf, around page 199):



DTLiflastrow{〈true part 〉}{〈false part 〉}



Checks if the current row is the last row of the database. It doesn’t
take the condition (the optional argument of DTLforeach) into
account
, so its possible it may never do 〈true part〉, as the last row
of the database may not meet the condition.



It is therefore not very
useful and is confusing since it behaves differently to DTLiffirstrow
which does take the condition ...







share|improve this answer
























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "85"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f480983%2fwhen-dtlforeach-is-used-with-a-condition-dtliflastrow-does-not-work%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    This is not a bug, it's a feature !



    See the doc (datatool-code.pdf, around page 199):



    DTLiflastrow{〈true part 〉}{〈false part 〉}



    Checks if the current row is the last row of the database. It doesn’t
    take the condition (the optional argument of DTLforeach) into
    account
    , so its possible it may never do 〈true part〉, as the last row
    of the database may not meet the condition.



    It is therefore not very
    useful and is confusing since it behaves differently to DTLiffirstrow
    which does take the condition ...







    share|improve this answer




























      1














      This is not a bug, it's a feature !



      See the doc (datatool-code.pdf, around page 199):



      DTLiflastrow{〈true part 〉}{〈false part 〉}



      Checks if the current row is the last row of the database. It doesn’t
      take the condition (the optional argument of DTLforeach) into
      account
      , so its possible it may never do 〈true part〉, as the last row
      of the database may not meet the condition.



      It is therefore not very
      useful and is confusing since it behaves differently to DTLiffirstrow
      which does take the condition ...







      share|improve this answer


























        1












        1








        1







        This is not a bug, it's a feature !



        See the doc (datatool-code.pdf, around page 199):



        DTLiflastrow{〈true part 〉}{〈false part 〉}



        Checks if the current row is the last row of the database. It doesn’t
        take the condition (the optional argument of DTLforeach) into
        account
        , so its possible it may never do 〈true part〉, as the last row
        of the database may not meet the condition.



        It is therefore not very
        useful and is confusing since it behaves differently to DTLiffirstrow
        which does take the condition ...







        share|improve this answer













        This is not a bug, it's a feature !



        See the doc (datatool-code.pdf, around page 199):



        DTLiflastrow{〈true part 〉}{〈false part 〉}



        Checks if the current row is the last row of the database. It doesn’t
        take the condition (the optional argument of DTLforeach) into
        account
        , so its possible it may never do 〈true part〉, as the last row
        of the database may not meet the condition.



        It is therefore not very
        useful and is confusing since it behaves differently to DTLiffirstrow
        which does take the condition ...








        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered yesterday









        Joseph MarieJoseph Marie

        1588




        1588






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f480983%2fwhen-dtlforeach-is-used-with-a-condition-dtliflastrow-does-not-work%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

            ComboBox Display Member on multiple fields

            Is it possible to collect Nectar points via Trainline?