Re: logic puzzle / 4gl report challenge
Posted in 1996
In article <5052b3$mqg@news.informix.com>,
Paul Roberts <proberts@lynx.informix.com> wrote:
>OK, *I* thought this was an interesting little problem to share with the
>world (your kilometerage may vary).
>
>Suppose I want a report that will list all the integers that appear in a
>certain column of a certain table. The following program:
>
>Now let us imagine that my user says:
>
> That's much too hard to read! Please print the numbers out like this...
> 1-17, 19-27, 30-36, 38-55, 81, 85, 101, 323-333
>
>Question... problem... challenge...
>
> How would you modify report "rpt1" to produce the required output?
>
>This had me obsessed for a day or so (I know, I should get a life) - I have
>a solution but there is probably a better one waiting to be discovered. I'll
>post it later if anyone expresses any interest.
>
>- Paul
>
I thought about this problem for 5 minutes solution in 20 using
the report example program that I posted yesterday.
database patern
main
define
masterid integer,
groupid integer,
lineid integer,
colid integer,
str char(5),
wstr char(50),
nbr integer,
beginRange, endRange integer
call createTable()
start report rpt to pipe "lp -onff -dlaser4"
declare rptcur cursor for
select unique intval from inttable order by intval
let beginRange = NULL
let endRange = 0
let masterId = 0
let groupId = 0
let lineId = 0
let colId = 200
foreach rptcur into nbr
let endRange = endRange +1
case
when beginRange is NULL
let beginRange = nbr
let endRange = nbr
continue foreach
when nbr = endRange
continue foreach
when nbr <> endRange
let endRange = endRange -1
let colId = colId+15
if colId > 80 then
let colId = 1
let lineId = lineId +1
end if
if beginRange = endRange then
let wstr = beginRange using "<<<<<<&"
else
let wstr = beginRange using "<<<<<<&", "-",
endRange using "<<<<<<&"
end if
output to report rpt (masterid, groupid, lineid, colid, wstr)
let beginRange = nbr
let endRange = nbr
end case
end foreach
let endRange = endRange -1
let colId = colId+15
if colId > 80 then
let colId = 1
let lineId = lineId +1
end if
if beginRange = endRange then
let wstr = beginRange using "<<<<<<&"
else
let wstr = beginRange using "<<<<<<&", "-",
endRange using "<<<<<<&"
end if
output to report rpt (masterid, groupid, lineid, colid, wstr)
finish report rpt
end main
report rpt (masterid, groupid, lineid, colid, str)
define
masterid, groupid, lineid, colid int,
str char(50)
output
top margin 0
bottom margin 0
left margin 0
right margin 100
order by masterid, groupid, lineid, colid
format
page header
print column 25, "Test Report"
skip 1 line
after group of masterid
skip 1 line
after group of groupid
skip 1 line
after group of lineid
print
on every row
print column colid, str clipped;
end report
function createTable()
create temp table inttable (intval integer)
insert into inttable values(1)
insert into inttable values(2)
insert into inttable values(3)
insert into inttable values(4)
insert into inttable values(5)
insert into inttable values(6)
insert into inttable values(7)
insert into inttable values(8)
insert into inttable values(9)
insert into inttable values(10)
insert into inttable values(11)
insert into inttable values(12)
insert into inttable values(13)
insert into inttable values(14)
insert into inttable values(15)
insert into inttable values(16)
insert into inttable values(17)
insert into inttable values(19)
insert into inttable values(20)
insert into inttable values(21)
insert into inttable values(22)
insert into inttable values(23)
insert into inttable values(24)
insert into inttable values(25)
insert into inttable values(26)
insert into inttable values(27)
insert into inttable values(30)
insert into inttable values(31)
insert into inttable values(32)
insert into inttable values(33)
insert into inttable values(34)
insert into inttable values(35)
insert into inttable values(36)
insert into inttable values(38)
insert into inttable values(39)
insert into inttable values(40)
insert into inttable values(41)
insert into inttable values(42)
insert into inttable values(43)
insert into inttable values(44)
insert into inttable values(45)
insert into inttable values(46)
insert into inttable values(47)
insert into inttable values(48)
insert into inttable values(49)
insert into inttable values(50)
insert into inttable values(51)
insert into inttable values(52)
insert into inttable values(53)
insert into inttable values(54)
insert into inttable values(55)
insert into inttable values(81)
insert into inttable values(85)
insert into inttable values(101)
insert into inttable values(323)
insert into inttable values(324)
insert into inttable values(325)
insert into inttable values(326)
insert into inttable values(327)
insert into inttable values(328)
insert into inttable values(329)
insert into inttable values(330)
insert into inttable values(331)
insert into inttable values(332)
insert into inttable values(333)
end function
--
Michael J. Kuhn Computer Systems Consultant phone:410-254-7060
Email: mkuhn@csd.clark.net, csd@clark.net
mkuhn@rhlab.com
c/o Baltimore Rh Typing Laboratory, Inc. phone:410-225-9595