[NTG-context] problem with lua io.lines

Hans Hagen pragma at wxs.nl
Wed Aug 14 17:00:56 CEST 2013


On 8/14/2013 4:43 PM, Henning Hraban Ramm wrote:
>
> Am 2013-08-14 um 20:15 schrieb Wolfgang Schuster <schuster.wolfgang at gmail.com>:
>
>>> Current beta MkIV seems to have a bug in the Lua function io.lines:
>>>
>>> for myline in io.lines(myfile) do
>>> logs.report(myline)
>>> end
>>>
>>> "myfile" just contains one line with a number, without return/newline.
>>> If the number has more than one digit, I get single digits as "myeline".
>>
>> Do you have a minimal working example?
>
> Minimal working yes, but not minimal failing ;-)
>
> This works:
>
> io.output(io.open("myfile.txt","w"))
> io.write("123")
> io.close()
>
> for myline in io.lines("myfile.txt") do
>    print(myline .. "\n")
> end
>
> But in my t-lilyfilter.tex where it reads the systems.count files of LilyPond (that contain only the number of note systems that resulted from the included LilyPond code), it fails:
>
>   function thirddata.parselilypondfile(name)
>     -- include all systems (note lines)
>     -- name is like \LILYTEMP/mainfile-temp-lilypond-21.pdf
>     logs.report("LILYPOND","name='" .. name .. "'")
>     syco = 0
>     for ts in io.lines(string.gsub(name, '%.pdf$', '-systems.count')) do
>       syco = ts*1
>     end
>
>     for nr = 1, syco do
>       logs.report("LILYPOND","including system no." .. nr)
>       context("\\externalfigure[" .. string.gsub(name, '%.pdf$', '-' .. nr) .. "]")
>     end
>   end
>
>
> While I have a single-digit number of systems, it works, but the song of my failing case has 11 lines.
>
> I wouldn't complain if it wouldn't have worked before!

well, you probably were lucky before: string.gsub returns multiple 
values so io.lines get a second argument that limits the length of what 
gets returned

local myfile = "myfile.txt"

for myline in io.lines(myfile,2) do
     logs.report("test",myline)
end

so you need:

   io.lines((string.gsub(name, '%.pdf$', '-systems.count')))

or

   local name = string.gsub(name, '%.pdf$', '-systems.count')

   io.lines(name)


or maybe better:

   io.lines(file.replacesuffix(name,'-systems.count'))

Hans

-----------------------------------------------------------------
                                           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