如何设置文本对象的格式,使其自动在每行的开头插入文本



下面是一个例子:

CSA.1169-1342, 1169-1342, 1349-1353, 
1349-1353, 1355-1368, 1355-1368, 
1371-2498, 1371-2498, 2501-2661, 
2501-2661, 2665-2691, 2665-2691, 
2693-2893, 2693-2893, 2897-3000, 
2897-3000

我需要每行以前缀CSA开始。这来自于不同的领域。我还从两个独立的字段创建了这个字符串,它们独立地呈现1349和1342,并添加了-和逗号。目标是能够保持对象的宽度相同,而文本大小实际上可能会改变,并允许字段换行并在每次换行时包含前缀。下面是该字段的另一个示例:

CRTX.220-239, 220-239, 241-249, 
241-249, 251-948, 251-948, 
90-218, 90-218, 950-983, 
950-983, 985-1000, 985-1000, 

我需要的是让结果呈现以下内容,而不管对象何时换行:

CRTX.220-239, 220-239, 241-249, 
CRTX.241-249, 251-948, 251-948, 
CRTX.90-218, 90-218, 950-983, 
CRTX.950-983, 985-1000, 985-1000,

我的意图是将此插入为链接到组的子报告。字符串中的CRTX将链接子报表。

您需要在考虑最小和最大字符数的同时决定单行可以容纳多少个数字范围。在您的示例中,假设每行最多需要3个字符。这应该足够让你开始了。

local stringvar sampletext :=
 "CRTX.220-239, 220-239, 241-249, 
 241-249, 251-948, 251-948, 
 90-218, 90-218, 950-983, 
 950-983, 985-1000, 985-1000,";
local stringvar array samplearry := split(sampletext,', '); //split string into elements
local numbervar x;
local stringvar out;
for x := 1 to ubound(samplearry)-1 do //ignore last element in array since it's empty
     (if remainder(x,3)=0 then out:=out + trim(samplearry[x]) + ", " + chr(13) + "CRTX."
      else out:=out + samplearry[x] + ", ");
//trim the line prefix if no elements fall on that line
if remainder(ubound(samplearry)-1,3)=0 then left(out,length(out)-8) else out

该公式将把字符串转换为:

CRTX.220-239, 220-239, 241-249, 
CRTX.241-249, 251-948, 251-948, 
CRTX.90-218, 90-218, 950-983, 
CRTX.950-983, 985-1000, 985-1000, 

我不知道在您调整字段大小时动态执行此操作的能力,但是使用以下公式可以更改包含mod的语句,这将提供您的问题中的输出。更改mod 4 = 0将每行输出四个数字等....(将字段改为can grow)

numbervar a;
stringvar prefix := split({yourfeild},".")[1];
stringvar data := split({yourfeild},".")[2];
stringvar array numbers := split(data,",");
numbervar counter := ubound(split(data,","));
stringvar output;
for a := 1 to counter do 
(
if a mod 3 =0 then output := output + trim(numbers[a]) +", " + chr(13) +  prefix +"."
else output := output + trim(numbers[a]) +", "
);
output := prefix + "."+mid(output,1,len(output)-2)

PROTIP:像这样复杂的需求最好在。net或任何你正在使用的语言中处理。而不是在Crystal中编写大量的代码,在SQL-Server, c#或其他语言中完成,并以您想要显示的形式将其传递给Crystal。Crystal只能用作表示服务。

你会后悔把.rpts变成迷你应用程序。它将您永远与该技术绑定在一起,并使支持/维护变得困难。

最新更新