[NTG-context] Tabulator in database file not passed to Lua

Hans Hagen pragma at wxs.nl
Thu Jan 23 23:17:24 CET 2014


On 1/23/2014 9:43 PM, Joshua Krämer wrote:
> Dear list,
>
> I use the database module to load the lines of a file with some
> data.  The lines are then separated with a lua script.  I use lua,
> because I need to do some other things with the data (rounding
> numbers, combining some fields etc.)  Please consider the following
> minimal working example:
>
> \usemodule[database]
> \defineseparatedlist [Data]
> [
> 	before=,
> 	after=,
> 	separator={},
> 	commentchar=\letterpercent,
> 	command=\Tabrow,
> ]
>
> \startluacode
> function explode(sep,str)
> if (sep=="") then return false end
>    local pos,arr = 0,{}
>    -- for each separator found
>    for st,sp in function() return string.find(str,sep,pos,true) end do
>      -- Attach chars left of current separator
>      table.insert(arr,string.sub(str,pos,st-1))
>      -- Jump past current separator
>      pos = sp + 1
>    end
>    -- Attach chars right of last separator
>    table.insert(arr,string.sub(str,pos))
> return arr
> end
>
> function tabrow(fileline)
> 	local tabarray = explode(";",fileline)
> 	local tabline = ""
> 	for index,value in ipairs(tabarray) do
> 		tabline = tabline .. " / " .. value
> 	end
> 	return tabline
> end
> \stopluacode
>
> \define[1]\Tabrow{\ctxlua{context(tabrow("#1"))}}
>
> \starttext
> \processseparatedfile[Data][Test.dat]
> \stoptext
>
> This is the content of the file Test.dat:
> Eins;zwei;drei;vier
>
>
> Of course the line separation could be done easier with the database
> module.  However, I thought this way I could use the tabulator as the
> separator in my file.  But when I change the separator from ";" to
> "\\t", it doesn't work.  I suppose this is because the tabulators are
> passed to Lua as spaces.  Or is "\\t" the wrong code?  Would it be
> possible to use tabulators as separators, if I load the file with lua
> and not with the database module?

\starttext

\startluacode

     local f = io.open("test.dat")

     for line in f:lines() do
         local t = string.split(line,";") -- or "\t" for tabs
         context("% /t",t) -- context(table.concat(t," / ")
         context.par()
     end

\stopluacode

\stoptext


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list