文本格式如下:
023842394201342|343242423423|342342424|533423|2455
3423532543453254645|4534532|5443534|342342|4554
想取第二个“|”与第三个“|”的数据
第三个“|”与第四个“|”的数据
并进行转换相加!
请给我一个函数,谢谢!
023842394201342|343242423423|342342424|533423|2455
3423532543453254645|4534532|5443534|342342|4554
想取第二个“|”与第三个“|”的数据
第三个“|”与第四个“|”的数据
并进行转换相加!
请给我一个函数,谢谢!
找找
begin
//not case sensitive
if (Length(substr)=0) or (Length(text)=0) then
Result:=0
else
Result:=(Length(text)-Length(StringReplace(text,substr,'',[rfReplaceAll,rfIgnoreCase]))) div length(substr);
end;function MiddleSubStr(const splitStr: String; text: String;
Postion: Integer): String;
var
I,J,M,N:Integer;
tempStr:String;
begin
Result:='';
tempStr:='';
I:=SubStrCount(splitStr,text);
if (I=0) or (I<Postion) then
exit;
for J:=1 to length(splitStr) do
tempStr:=tempStr+'x';
for J:=1 to I do
begin
M:=AnsiPos(splitStr,text);
N:=AnsiPos(splitStr,StringReplace(text,splitStr,tempStr,[]));
if J<>Postion then
text:=StringReplace(text,splitStr,tempStr,[])
// text:=Copy(text,I+Length(startStr),Length(text)-I-Length(startStr));
else
Result:=Copy(text,M+Length(splitStr),N-M-1);
end;
end;//use
var
IntStr1,IntStr2,targetStr:String;
I1,I2,TargetNum:Integer;
begin
targetStr:='023842394201342|343242423423|342342424|533423|2455'+
'3423532543453254645|4534532|5443534|342342|4554';IntStr1:=MiddleSubStr('|',targetStr,2);
IntStr2:=MiddleSubStr('|',targetStr,3);
try
I1:=StrToInt(IntStr1);
I2:=StrToInt(IntStr2);
Target:=I1+I2;
except
end;
end;
var
I: Integer;
begin
I := aPos;
while (I <= Length(aString)) and (aString[I] <> aSeparator) do Inc(I);
Result := Trim(Copy(aString, aPos, I - aPos));
if (I <= Length(aString)) and (aString[I] = aSeparator) then Inc(I);
aPos := I;
end;procedure TForm1.Button1Click(Sender: TObject);
var
lString, lSubString: string;
lPos, j: integer;
begin
lString := '023842394201342|343242423423|342342424|533423|2455';
lPos := 1;
j := 0; while lPos <= Length(lString) do
begin
lSubString := ExtractString(lString, '|', lPos);
inc(j);
if j = 2 then // 第二個
showmessage(lSubString);
end;
end;
begin
//not case sensitive
if (Length(substr)=0) or (Length(text)=0) then
Result:=0
else
Result:=(Length(text)-Length(StringReplace(text,substr,'',[rfReplaceAll,rfIgnoreCase]))) div length(substr);
end;function MiddleSubStr(const splitStr: String; text: String;
Postion: Integer): String;
var
I,J,M,N:Integer;
tempStr:String;
begin
Result:='';
tempStr:='';
I:=SubStrCount(splitStr,text);
if (I=0) or (I<Postion) then
exit;
for J:=1 to length(splitStr) do
tempStr:=tempStr+'x';
for J:=1 to I do
begin
M:=AnsiPos(splitStr,text);
N:=AnsiPos(splitStr,StringReplace(text,splitStr,tempStr,[]));
if J<>Postion then
text:=StringReplace(text,splitStr,tempStr,[])
// text:=Copy(text,I+Length(startStr),Length(text)-I-Length(startStr));
else
Result:=Copy(text,M+Length(splitStr),N-M-1);
end;
end;//use
var
IntStr1,IntStr2,targetStr:String;
I1,I2,TargetNum:Integer;
begin
targetStr:='023842394201342|343242423423|342342424|533423|2455'+
'3423532543453254645|4534532|5443534|342342|4554';IntStr1:=MiddleSubStr('|',targetStr,2);
IntStr2:=MiddleSubStr('|',targetStr,3);
try
I1:=StrToInt(IntStr1);
I2:=StrToInt(IntStr2);
Target:=I1+I2;
except
end;
end;
function TForm1.ExtractString(const aString: string; const aSeparator: char; var aPos: Integer): string;
var
I: Integer;
begin
I := aPos;
while (I <= Length(aString)) and (aString[I] <> aSeparator) do Inc(I);
Result := Trim(Copy(aString, aPos, I - aPos));
if (I <= Length(aString)) and (aString[I] = aSeparator) then Inc(I);
aPos := I;
end;procedure TForm1.Button1Click(Sender: TObject);
var
lString, lSubString: string;
lPos, j: integer;
begin
lString := '023842394201342|343242423423|342342424|533423|2455';
lPos := 1;
j := 0; while lPos <= Length(lString) do
begin
lSubString := ExtractString(lString, '|', lPos);
inc(j);
if j = 2 then // 第二個
showmessage(lSubString);
end;
end;
var
lString :string;
k:integer;
begin
lString := '023842394201342|343242423423|342342424|533423|2455';
k:=strtoint(edit1.Text);
showmessage(outString(lString,k));end;function TForm1.outString(lString:string;k: Integer): string; //成对出现,以双数为主,如(2、4、6、8)
var
lSubString: string;
lPos, j: integer;
begin
lPos := 1;
j := 0;
while lPos <= Length(lString) do
begin
lSubString := ExtractString(lString, '|', lPos);
inc(j);
if j =k then
result:=lSubString;
end;
end;function TForm1.ExtractString(const aString: string; const aSeparator: char; var aPos: Integer): string;
var
I: Integer;
begin
I := aPos;
while (I <= Length(aString)) and (aString[I] <> aSeparator) do Inc(I);
Result := Trim(Copy(aString, aPos, I - aPos));
if (I <= Length(aString)) and (aString[I] = aSeparator) then Inc(I);
aPos := I;
end;
var
ScrStr:String;
Rtn:string;
begin
ScrStr := '023842394201342|343242423423|342342424|533423|';
Rtn := inttostr(GetData(ScrStr,2,3));
showmessage(Rtn);
end;
function TForm1.GetData(ScrStr:string;k,j:integer):DWORD;
var
TmpStr,Tmp: String;
LinePos: Integer;
Data1, Data2: DWORD;
Index: Integer;
begin
data1:=0;
data2:=0;
TmpStr := ScrStr;
Index := 0;
While(Pos('|', TmpStr) > 0) do
begin
LinePos := Pos('|', TmpStr);
if (Index = k) Then
begin
Tmp := Copy(TmpStr, 1, LinePos-1);
Data1 := StrToInt(Tmp);
end
else if (Index =j) Then
begin
Tmp := Copy(TmpStr, 1, LinePos-1);
Data2 := StrToInt(Tmp);
Break;
end;
Delete(TmpStr,1,LinePos);
Index := Index + 1;
end;
Result := Data1 + Data2;
end;