0

私はこれを i-net Designer (別の Crystal Report タイプのプログラム) で行っています。
私の問題には2つの部分があります...

文字列から文字列の一部を「抽出」しようとしています。私が必要とする弦は、常に主弦の真ん中にあります。しかし、決して同じ立場になることはありません。説明と長さは常に変わります。

以下は例です。
説明(これは私が「抽出」しているメインの文字列です):

    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)までの本のタイトルです。したがって、必要な のは、私の Book Here CD の名前だけです。

数式フィールド @PartNumber および @Description の「数式エディター」でこれを行う

4

3 に答える 3

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);
于 2012-07-12T16:01:07.453 に答える
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が必要です。

于 2012-07-12T17:48:21.367 に答える
0

パート 2 - 説明については、これを思いつきました (コードの最後の行を変更しただけです
)

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)));
于 2012-07-12T17:09:52.023 に答える