Crystal语法 - “提取”字符串中字符串的一部分

时间:2012-07-12 15:38:06

标签: syntax crystal-reports

我在i-net Designer(另一个Crystal Report类型程序)中这样做 我正在努力学习水晶语法,因为我不熟悉它,因为我不熟悉它 我的问题有两部分......

我试图从字符串中“提取”字符串的一部分。我需要的字符串将始终位于主字符串的中间。但绝不会处于相同的位置。描述和长度将始终改变。

以下是一个例子 说明(这是我从中“提取”的主要字符串):

    The Name of my Book Here CD CTN1234-5678-9 2-1 CD Carton

第1部分
我想要提取的字符串是Part#, CTN1234-5678-9 。这将始终是14个字符长(3个字母,9个数字和2个破折号)。

第2部分
我只需要描述部分。这是从LEFT到Part#(CTN1234-5678-9)的书的标题。所以我只需要我的书名CD

非常感谢任何帮助:)

EDITED
在“公式编辑器”中为我的公式字段@PartNumber和@Description

执行此操作

3 个答案:

答案 0 :(得分:1)

我确信有一种更简单的方法 - 但这有效:

local stringVar myString   := 'The Name of my Book Here CD CTN1234-5678-9 2-1 CD Carton';
local numberVar myPosition := len(myString);

while not(mid(myString, myPosition - 14, 14) like '???????-????-?') and myPosition > 14
 do myPosition := myPosition - 1;

mid(myString, myPosition - 14, 14);

答案 1 :(得分:0)

对于第2部分 - 说明我想出了这个(只修改最后一行代码):
再次感谢@Lee Tickett
感谢您的帮助!

local stringVar myString := 'The Name of my Book Here CD CTN1234-5678-9 2-1 CD Carton';
local numberVar myPosition := length(myString);

while not(mid(myString, myPosition - 14, 14) like '???????-????-?') and myPosition > 14
 do myPosition := myPosition - 1;

uppercase(trim(left(myString, myPosition - 15)));

答案 2 :(得分:0)

您可以使用正则表达式:

// {@Book Title}
// ([A-Z]{3}[0-9]{4}-[0-9]{4}-[0-9]{1}) - matches the part #
// (.*?) - a non-greedy captured group
// (?= ) - a look-ahead
RegexMatch( "(.*?)(?=([A-Z]{3}[0-9]{4}-[0-9]{4}-[0-9]{1}))" )

您需要Crystal Reports Regex Library