需求如下:
对于一个字符串“G01R320C-YC353-211113-YM37B-5-YC”,需要取出第一个横杠和第四个横杠之间部分生成QR二维码。
解决思路:
取字符串的一部分用Copy函数,取指定标志字符用Pos函数,但Pos只能取第一次出现指定字符的位置,需要写个函数扩展一下。
最终脚本如下:
{/*************************
* 取字符串指定标志之间部分生成二维码
**************************/}
// 计算子串在主串第几次出现的位
function PosEx(substring,s:string;times:Integer):Integer;
var
nCount,nIndex: Integer;
begin
nCount:=0;
while times>0 do
begin
nIndex:=Pos(substring,s);
if nIndex<=0 then
break;
s:=Copy(s,nIndex+1,Length(s)-nIndex);
nCount:=nCount+nIndex;
times:=times-1;
end;
Result:=nCount;
end;
procedure MasterData2OnBeforePrint(Sender: TfrxComponent);
var
S: String;
p1, p2: Integer;
begi
s := 'G01R320C-YC353-211113-YM37B-5-YC'; //完整字符串
p1 := PosEx('-', s, 1); //第一个标志位置
p2 := PosEx('-', s, 4); //第二个标志位置
if p1<1 then p1 := 1; //如果第一个标志未找到,则从头开始取
if p2<1 then p2 := Length(s); //如果第二个标志未找到,则取到末尾
Barcode2D1.Text := Copy(s, p1+1, p2 - p1 - 1); //截取字符串并赋值给二维码组件
end;