2012-07-12 120 views
0

我在i-net Designer(另一個Crystal Report類型程序)中執行此操作。
我正在嘗試學習水晶語法,所以對我來說就像我剛接觸它一樣。
我的問題有兩個部分...Crystal語法 - 「提取」字符串中的字符串的一部分

我想從字符串中「提取」一部分字符串。我需要的字符串將始終位於主字符串的中間。但絕不會處於相同的位置。描述和長度將一直改變。

下面是一個例子。
說明(這是主要的字符串我從「提取」):

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

第1部分
我想提取字符串是零件編號,CTN1234-5678-9。這將始終是14個字符(3個字母,9個數字和2個破折號)。

第2部分
我只需要描述部分。這是本書的標題,從左開始到Part#(CTN1234-5678-9)。所以,我只需要

任何幫助,將不勝感激:)

EDITED
在「公式編輯器」爲我的公式字段@PartNumber和這樣做我的書在這裏CD的名稱@說明

回答

1

我敢肯定有一個更簡單的way-但這個工程:

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

你真棒,我得到這個爲我的PartNumber公式字段工作,我將不得不看看它,以瞭解它是如何工作的。你有辦法獲得第2部分?我會很感激它很多。 – jwahr 2012-07-12 16:25:30

+0

我實際上檢查了你提供的示例代碼,並且理解它在經過兩種不同的描述之後是如何工作的。做得好!無法得到任何簡單的國際海事組織(但我只是在學習哈哈)。 – jwahr 2012-07-12 16:32:07

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