我在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
答案 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}))" )