1

这是一个例子:

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 将链接子报告。

4

3 回答 3

1

您需要在考虑最小和最大字符数的同时决定一行可以容纳多少个数字范围。给定您的示例,假设 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, 
于 2013-04-02T15:51:48.767 回答
0

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

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)
于 2013-04-02T15:48:20.317 回答
0

提示:像这样的复杂需求最好在 .NET 或您使用的任何语言中处理。与其在 Crystal 中编写大量代码,不如使用 SQL-Server、C# 或其他方式编写,然后以您希望它显示的形式将其传递给 Crystal。仅将 Crystal 用作演示服务。

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

于 2013-04-02T17:01:53.680 回答