Crystal Syntax-“水晶语法”;摘录;字符串中字符串的一部分

Crystal Syntax-“水晶语法”;摘录;字符串中字符串的一部分,syntax,crystal-reports,Syntax,Crystal Reports,我在I-net Designer(另一个Crystal Report类型程序)中执行此操作。 我的问题有两部分 我试图从字符串中“提取”字符串的一部分。我需要的字符串总是在主字符串的中间。但永远不会处于相同的位置。描述和长度将始终更改 下面是一个例子。 说明(这是我正在“提取”的主要字符串): The Name of my Book Here CD CTN1234-5678-9 2-1 CD Carton 第一部分 我试图提取的字符串是部分#,CTN1234-5678-9。这将始终是1

我在I-net Designer(另一个Crystal Report类型程序)中执行此操作。
我的问题有两部分

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

下面是一个例子。
说明(这是我正在“提取”的主要字符串):

    The Name of my Book Here CD CTN1234-5678-9 2-1 CD Carton
第一部分
我试图提取的字符串是部分#,CTN1234-5678-9。这将始终是14个字符长(3个字母、9个数字和2个破折号)

第二部分
我只需要描述部分。这是本书的书名,从左到右(CTN1234-5678-9)。所以我只需要我的书的名字就可以了


在“公式编辑器”中为我的公式字段@PartNumber和@Description执行此操作,我确信有一种更简单的方法-但这是有效的:

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);

对于第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)));

您可以使用正则表达式:

// {@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}))" )

你需要。

你真是太棒了,我把这个应用到我的PartNumber公式字段中,我必须实际查看它以了解它的实际工作原理。你有办法得到第二部分吗?我会非常感激的。实际上,我已经阅读了您提供的示例代码,在阅读了两个不同的描述之后,我理解了它是如何工作的。干得好!在IMO中无法得到任何更简单的东西(但我只是在学习lol)。