hmmm...Crystal cannot grow horizontaly so you are kinda hooped as far as linking the individual fields together but we might try doing it in bits and pieces. I am thinking about chopping up each field into smaller fields...
the basic idea is this (thinking out loud here)
1. Without a "Can Grow" you could not display a complete field anyway...right
2. Depending on your font you might be able to display say 80 chars from margin to margin
3. we would store each field value and flag in an array element for later processing in a footer.
4. then we would print out the paragraph in 80 char segments, terminating the segment when we encountered a NewParagraph flag.
5. currently you have an example of 19 sentences of 254 char each...this means we must at the least have (254/80)*19 = about 80 subsections in the footer printing the result.
So we should plan for 100 subsections...obviously this is a lot and could be reduced if you had a smaller font giving you more chars/line....
We would have no indentation to the paragraph and a single blank line will separate the paragraphs
So...in the report header place the following forumla
//@initialize (suppressed)
WhilePrintingRecords;
//for sake of arguement we shall make it 30 sentences + 20
//indications of a new paragraph (this will make sense
//later) for a total of 50 elements.
stringVar Array Info := [ "","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","" ];
//the final 100 subsection values
stringVar Array Final := [ "","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","",
"","","","","","","","","","" ];
numberVar pointer := 0;
in the detail section
//@CollectSentences/flags (suppressed)
WhilePrintingRecords;
stringVar Array Info;
numberVar pointer;
pointer := pointer + 1;
Info[pointer] := trim({table.sentence});
if {Table.flag} <> "Text" then
(
pointer := Pointer + 1;
Info[pointer] := "NP";
);
okay now we have to combine this in a footer somehow
Okay the final result will be in the report footer
in the Group footer though place the following formula
//@CombineSentences
WhilePrintingRecords;
stringVar Array Info;
stringVar Array Final;
stringVar temp;
numberVar pointer;
numberVar y;
numverVar x;
numberVar subsection := 1;
for temp := 1 to pointer do
(
temp := info[y];
for x := 1 to length

do
(
if length(Final[subsection]) < 80 then
(
if temp[x] + temp[x+1] <> "NP then
Final[subsection] := Final[subsection] + temp[x]
else
(
subsection := subsection + 1;
Final[subsection] := " "; //NP blank line
subsection := subsection + 1;
Final[subsection] := ""; //to make if-then work
);
)
else
(
subsection := subsection + 1;
if temp[x] + temp[x+1] <> "NP then
Final[subsection] := Final[subsection] + temp[x]
else
(
Final[subsection] := " "; //NP blank line
subsection := subsection + 1;
Final[subsection] := ""; //to make if-then work
);
);
);
);
Now in each of 100 report footer sections you would place a formula like the following...stretched...margin to margin
//@DisplayLine1 (placed in report footer section A)
WhilePrintingRecords;
stringVar Array Final;
Final[1];
*******************
//@DisplayLine2 (placed in report footer section B)
WhilePrintingRecords;
stringVar Array Final;
Final[2];
you get the picture....make sure you have the "suppress Blank section" enabled for each report footer subsection.
That might do the job for you ....hope it gives you some ideas anyway....
Jim Broadbent
The quality of the answer is directly proportional to the quality of the problem statement!