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
-----------------------------------------------------------------
___________________________________________________________________________________
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://tex.aanhet.net
archive : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___________________________________________________________________________________