ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* xtable headers and handlecsv loop
@ 2020-04-03  9:57 Geert Dobbels
  2020-04-03 10:18 ` Wolfgang Schuster
  2020-04-03 10:31 ` Pablo Rodriguez
  0 siblings, 2 replies; 7+ messages in thread
From: Geert Dobbels @ 2020-04-03  9:57 UTC (permalink / raw)
  To: ntg-context


[-- Attachment #1.1: Type: text/plain, Size: 2133 bytes --]

Hello,

The sample below has 2 problems I cannot find the solution for:

I am reading a table from a CSV file and want to typeset it via \xtable.

The xtable as defined below works, it splits over several pages, but the
header does not repeat. I have seen examples in the mailing list where
people put the "\startxtable.....\stopxtable" within a \placefigure, but
as soon as I try this, I get an error message: "missing } or endgroup",
although I doublechecked the "}" and I see no error.

The other issue I have: Since xtable requires me to read the header line
separately in order to put it between \startxtablehead and
\stopxtablehead, I access the csv buffer twice: the first time, I only
read the first line, and the second time, I read starting from the
second line. My problem here is that I do not know beforehand the number
of lines in the csv file. So in my second \doloopfromto I give the
second argument a number high enough to be sure it reads all the lines.
It works fine, but I would like to know if there is a way to read the
number of lines in the csv file to use the exact number of lines,
instead of guessing.

\usemodule[handlecsv]


\opencsvfile{systaprov2.csv}

\starttext


\startbuffer[loop]

\startxrow

\startxcell[left] \cA \stopxcell

\startxcell[left] \cB \stopxcell

\startxcell[left] \cC \stopxcell

\startxcell[left] \cD \stopxcell

\startxcell \cE \stopxcell

\startxcell[left] \cF \stopxcell

\startxcell \cG \stopxcell

\startxcell \cH \stopxcell

\doifdefined{cI}{\startxcell \cI \stopxcell}

\doifdefined{cJ}{\startxcell \cJ \stopxcell}

\doifdefined{cK}{\startxcell [left] \cK \stopxcell}

\stopxrow

\stopbuffer

\setupxtable[offset=0cm,

frame=off,

bottomframe=on,

framecolor=gray,

option=stretch,

align=middle]

\setupxtable[head][background=color,

backgroundcolor=gray,

topframe=on,

bottomframe=on,

framecolor=black,

foregroundcolor=blue]

\setupxtable[left][align=right]

\startxtable[header=repeat]

\startxtablehead[head]

\doloopfromto{1}{1}{\getbuffer[loop]}

\stopxtablehead

\startxtablebody

\doloopfromto{2}{500}{\getbuffer[loop]}

\stopxtablebody

\stopxtable

\stoptext


[-- Attachment #1.2: Type: text/html, Size: 9651 bytes --]

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: xtable headers and handlecsv loop
  2020-04-03  9:57 xtable headers and handlecsv loop Geert Dobbels
@ 2020-04-03 10:18 ` Wolfgang Schuster
  2020-04-03 13:36   ` Geert Dobbels
  2020-04-03 10:31 ` Pablo Rodriguez
  1 sibling, 1 reply; 7+ messages in thread
From: Wolfgang Schuster @ 2020-04-03 10:18 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Geert Dobbels

Geert Dobbels schrieb am 03.04.2020 um 11:57:
> Hello,
> 
> The sample below has 2 problems I cannot find the solution for:
> 
> I am reading a table from a CSV file and want to typeset it via \xtable.
> 
> The xtable as defined below works, it splits over several pages, but the 
> header does not repeat. I have seen examples in the mailing list where 
> people put the "\startxtable.....\stopxtable" within a \placefigure, but 
> as soon as I try this, I get an error message: "missing } or endgroup", 
> although I doublechecked the "}" and I see no error.
> 
> The other issue I have: Since xtable requires me to read the header line 
> separately in order to put it between \startxtablehead and 
> \stopxtablehead, I access the csv buffer twice: the first time, I only 
> read the first line, and the second time, I read starting from the 
> second line. My problem here is that I do not know beforehand the number 
> of lines in the csv file. So in my second \doloopfromto I give the 
> second argument a number high enough to be sure it reads all the lines. 
> It works fine, but I would like to know if there is a way to read the 
> number of lines in the csv file to use the exact number of lines, 
> instead of guessing.
> 
> \usemodule[handlecsv]
> 
> \opencsvfile{systaprov2.csv}
> 
> \starttext
> 
> 
> \startbuffer[loop]
> \startxrow
> \startxcell[left] \cA \stopxcell
> \startxcell[left] \cB \stopxcell
> \startxcell[left] \cC \stopxcell
> \startxcell[left] \cD \stopxcell
> \startxcell \cE \stopxcell
> \startxcell[left] \cF \stopxcell
> \startxcell \cG \stopxcell
> \startxcell \cH \stopxcell
> \doifdefined{cI}{\startxcell \cI \stopxcell}
> \doifdefined{cJ}{\startxcell \cJ \stopxcell}
> \doifdefined{cK}{\startxcell [left] \cK \stopxcell}
> \stopxrow
> \stopbuffer
> 
> \setupxtable[offset=0cm,
> frame=off,
> bottomframe=on,
> framecolor=gray,
> option=stretch,
> align=middle]
> 
> \setupxtable[head][background=color,
> backgroundcolor=gray,
> topframe=on,
> bottomframe=on,
> framecolor=black,
> foregroundcolor=blue]
> 
> \setupxtable[left][align=right]
> 
> \startxtable[header=repeat]

Add "split=repeat" to \startxtable.

> \startxtablehead[head]
> \doloopfromto{1}{1}{\getbuffer[loop]}
> \stopxtablehead
> \startxtablebody
> \doloopfromto{2}{500}{\getbuffer[loop]}
> \stopxtablebody
> 
> \stopxtable
> 
> \stoptext

Wolfgang
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: xtable headers and handlecsv loop
  2020-04-03  9:57 xtable headers and handlecsv loop Geert Dobbels
  2020-04-03 10:18 ` Wolfgang Schuster
@ 2020-04-03 10:31 ` Pablo Rodriguez
  2020-04-03 11:34   ` Pablo Rodriguez
  1 sibling, 1 reply; 7+ messages in thread
From: Pablo Rodriguez @ 2020-04-03 10:31 UTC (permalink / raw)
  To: ntg-context

On 4/3/20 11:57 AM, Geert Dobbels wrote:
> Hello,
>
> The sample below has 2 problems I cannot find the solution for:
>
> I am reading a table from a CSV file and want to typeset it via \xtable.
>
> The xtable as defined below works, it splits over several pages, but the
> header does not repeat. I have seen examples in the mailing list where
> people put the "\startxtable.....\stopxtable" within a \placefigure, but
> as soon as I try this, I get an error message: "missing } or endgroup",
> although I doublechecked the "}" and I see no error.

Hi Geert,

your sample lacks the CSV file. Of course, we don’t need your actual
data, but something to test your sample is required.

BTW, how about using \startembeddedxtable...\stopembeddedxtable instead
of \startxtable...\stopxtable? This has worked for me in some documents.

> The other issue I have: Since xtable requires me to read the header line
> separately in order to put it between \startxtablehead and
> \stopxtablehead, I access the csv buffer twice: the first time, I only
> read the first line, and the second time, I read starting from the
> second line. My problem here is that I do not know beforehand the number
> of lines in the csv file.

I don’t understand what you aiming at, but \numrows gives exactly that
information.

> So in my second \doloopfromto I give the second argument a number
> high enough to be sure it reads all the lines. It works fine, but I
> would like to know if there is a way to read the number of lines in
> the csv file to use the exact number of lines, instead of guessing.

If \numrows doesn’t fit your needs, please provide a CSV file with fake
data. I cannot guess why a second loop might be required.

I hope it helps,

Pablo
--
http://www.ousia.tk
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: xtable headers and handlecsv loop
  2020-04-03 10:31 ` Pablo Rodriguez
@ 2020-04-03 11:34   ` Pablo Rodriguez
  2020-04-03 13:16     ` Geert Dobbels
  0 siblings, 1 reply; 7+ messages in thread
From: Pablo Rodriguez @ 2020-04-03 11:34 UTC (permalink / raw)
  To: ntg-context

On 4/3/20 12:31 PM, Pablo Rodriguez wrote:
> On 4/3/20 11:57 AM, Geert Dobbels wrote:
>> [...]
>> So in my second \doloopfromto I give the second argument a number
>> high enough to be sure it reads all the lines. It works fine, but I
>> would like to know if there is a way to read the number of lines in
>> the csv file to use the exact number of lines, instead of guessing.
>
> If \numrows doesn’t fit your needs, please provide a CSV file with fake
> data. I cannot guess why a second loop might be required.

Hi Geert,

this approach is simpler:

    \starttext
    \startxtable
    \startxtablehead[head]
    \doloopif{\lineno}{<}{2}{\getbuffer[loop]}
    \stopxtablehead
    \startxtablebody
    \doloopif{\lineno}{>}{1}{\getbuffer[loop]}
    \stopxtablebody
    \stopxtable
    \stoptext

Only loop header with CSV lines numbered below 2, and loop boody with
CSV lines numbered above 1.

Pablo
--
http://www.ousia.tk
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: xtable headers and handlecsv loop
  2020-04-03 11:34   ` Pablo Rodriguez
@ 2020-04-03 13:16     ` Geert Dobbels
  2020-04-03 13:53       ` Pablo Rodriguez
  0 siblings, 1 reply; 7+ messages in thread
From: Geert Dobbels @ 2020-04-03 13:16 UTC (permalink / raw)
  To: ntg-context

Pablo,

Gracias, your suggestion with \rownums works.  I will try this one too,
since it is a simpler solution.  By the way, All information I have
about handlecsv comes from the PDF file you wrote.  \rownums and \lineno
are not explained in this document.  Do you know of documentation that
describes those aspects ?

Geert


On 03/04/2020 13:34, Pablo Rodriguez wrote:
> On 4/3/20 12:31 PM, Pablo Rodriguez wrote:
>> On 4/3/20 11:57 AM, Geert Dobbels wrote:
>>> [...]
>>> So in my second \doloopfromto I give the second argument a number
>>> high enough to be sure it reads all the lines. It works fine, but I
>>> would like to know if there is a way to read the number of lines in
>>> the csv file to use the exact number of lines, instead of guessing.
>> If \numrows doesn’t fit your needs, please provide a CSV file with fake
>> data. I cannot guess why a second loop might be required.
> Hi Geert,
>
> this approach is simpler:
>
>     \starttext
>     \startxtable
>     \startxtablehead[head]
>     \doloopif{\lineno}{<}{2}{\getbuffer[loop]}
>     \stopxtablehead
>     \startxtablebody
>     \doloopif{\lineno}{>}{1}{\getbuffer[loop]}
>     \stopxtablebody
>     \stopxtable
>     \stoptext
>
> Only loop header with CSV lines numbered below 2, and loop boody with
> CSV lines numbered above 1.
>
> Pablo
> --
> http://www.ousia.tk
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
>
> maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
> archive  : https://bitbucket.org/phg/context-mirror/commits/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: xtable headers and handlecsv loop
  2020-04-03 10:18 ` Wolfgang Schuster
@ 2020-04-03 13:36   ` Geert Dobbels
  0 siblings, 0 replies; 7+ messages in thread
From: Geert Dobbels @ 2020-04-03 13:36 UTC (permalink / raw)
  To: mailing list for ConTeXt users


[-- Attachment #1.1: Type: text/plain, Size: 3083 bytes --]

Wolfgang,

Thanks for this.  It works, however, the page where the table starts has
three lines of text before the table starts.  After inserting
"split=repeat", the table jumps to the next page, leaving the rest of
the page with the three lines of text completely blank.  This did not
happen without the "split=repeat".

Geert



On 03/04/2020 12:18, Wolfgang Schuster wrote:
> Geert Dobbels schrieb am 03.04.2020 um 11:57:
>> Hello,
>>
>> The sample below has 2 problems I cannot find the solution for:
>>
>> I am reading a table from a CSV file and want to typeset it via \xtable.
>>
>> The xtable as defined below works, it splits over several pages, but
>> the header does not repeat. I have seen examples in the mailing list
>> where people put the "\startxtable.....\stopxtable" within a
>> \placefigure, but as soon as I try this, I get an error message:
>> "missing } or endgroup", although I doublechecked the "}" and I see
>> no error.
>>
>> The other issue I have: Since xtable requires me to read the header
>> line separately in order to put it between \startxtablehead and
>> \stopxtablehead, I access the csv buffer twice: the first time, I
>> only read the first line, and the second time, I read starting from
>> the second line. My problem here is that I do not know beforehand the
>> number of lines in the csv file. So in my second \doloopfromto I give
>> the second argument a number high enough to be sure it reads all the
>> lines. It works fine, but I would like to know if there is a way to
>> read the number of lines in the csv file to use the exact number of
>> lines, instead of guessing.
>>
>> \usemodule[handlecsv]
>>
>> \opencsvfile{systaprov2.csv}
>>
>> \starttext
>>
>>
>> \startbuffer[loop]
>> \startxrow
>> \startxcell[left] \cA \stopxcell
>> \startxcell[left] \cB \stopxcell
>> \startxcell[left] \cC \stopxcell
>> \startxcell[left] \cD \stopxcell
>> \startxcell \cE \stopxcell
>> \startxcell[left] \cF \stopxcell
>> \startxcell \cG \stopxcell
>> \startxcell \cH \stopxcell
>> \doifdefined{cI}{\startxcell \cI \stopxcell}
>> \doifdefined{cJ}{\startxcell \cJ \stopxcell}
>> \doifdefined{cK}{\startxcell [left] \cK \stopxcell}
>> \stopxrow
>> \stopbuffer
>>
>> \setupxtable[offset=0cm,
>> frame=off,
>> bottomframe=on,
>> framecolor=gray,
>> option=stretch,
>> align=middle]
>>
>> \setupxtable[head][background=color,
>> backgroundcolor=gray,
>> topframe=on,
>> bottomframe=on,
>> framecolor=black,
>> foregroundcolor=blue]
>>
>> \setupxtable[left][align=right]
>>
>> \startxtable[header=repeat]
>
> Add "split=repeat" to \startxtable.
>
>> \startxtablehead[head]
>> \doloopfromto{1}{1}{\getbuffer[loop]}
>> \stopxtablehead
>> \startxtablebody
>> \doloopfromto{2}{500}{\getbuffer[loop]}
>> \stopxtablebody
>>
>> \stopxtable
>>
>> \stoptext
>
> Wolfgang

-- 
-- 
*_IHTS Approvals S.L._*
Geert Dobbels                                                        
geert@ihts.eu <mailto:geert@ihts.eu>
Zubiegi 11, E-01139 Bitoriano (Spain)                  0034 945 462633
ihts.eu

[-- Attachment #1.2: Type: text/html, Size: 4918 bytes --]

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: xtable headers and handlecsv loop
  2020-04-03 13:16     ` Geert Dobbels
@ 2020-04-03 13:53       ` Pablo Rodriguez
  0 siblings, 0 replies; 7+ messages in thread
From: Pablo Rodriguez @ 2020-04-03 13:53 UTC (permalink / raw)
  To: ntg-context

On 4/3/20 3:16 PM, Geert Dobbels wrote:
> Pablo,
>
> Gracias, your suggestion with \rownums works.  I will try this one too,
> since it is a simpler solution.  By the way, All information I have
> about handlecsv comes from the PDF file you wrote.  \rownums and \lineno
> are not explained in this document.  Do you know of documentation that
> describes those aspects ?

Geert,

de nada 😉. I know that handlecsv has many other features that aren’t
documented.

I don’t have much time now, but as I wrote the user manual, I didn’t
have many cases that didn’t look extremely complex. And this would be
the best way to scare newcomers.

If you aren’t scared, t-handlecsv.lua contains a complete list of
defined commands (as a huge comment near the end of the file). You might
 be interested in reading them.

Or feel free to ask here for help, if you don’t find the command, its
explanation, or the right approach to solve an issue dealing with data
from CSV files. (But please, individual issues, not the explatiation for
the whole command list 😅.)

Pablo
--
http://www.ousia.tk
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-04-03 13:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-03  9:57 xtable headers and handlecsv loop Geert Dobbels
2020-04-03 10:18 ` Wolfgang Schuster
2020-04-03 13:36   ` Geert Dobbels
2020-04-03 10:31 ` Pablo Rodriguez
2020-04-03 11:34   ` Pablo Rodriguez
2020-04-03 13:16     ` Geert Dobbels
2020-04-03 13:53       ` Pablo Rodriguez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).