求取一字符串的方法,高手请进! ( 积分: 3 )

  • 主题发起人 主题发起人 zpselect
  • 开始时间 开始时间
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
S:widestring;
s:='http://www.hnccic.com/ccaa/../BB/2007/长沙/第二期/text.text'
现在要分别取出:BB,2007,长沙,第二期这几个内容,
分别分置s1,s2,s3,s4四个变量中!
 
Function SeperateFields(Var sLine: String; sSeperater: String): String;
Var
iSeperatedPoint : integer;
sField : String;
Begin
iSeperatedPoint := Pos(sSeperater, sLine);
sField := copy(sLine, 1, iSeperatedPoint - 1);
Delete(sLine, 1, iSeperatedPoint);
Result := Trim(sField);
End;
 
好像不行吧?要保存到变量中去的啊!
 
使用这个函数来一个While循环就解决问题了
 
这个方法好像不行的,我要一次性取完,而且变量S值是动态变化的,不是固定值!
 
如果只是取文件最后几层目录的话,可以这样
procedure TForm1.Button1Click(Sender: TObject);
{function GetPos(s, s1: string; i: integer);
begin

end; }
var
s, s0, s1, s2, s3, s4: string;
iLen: integer;

i1, i2: integer;
begin
s := 'http://www.hnccic.com/ccaa/../BB/2007/长沙/第二期/text.text';
iLen := length(s);
s0 := ReverseString(s);
i1 := pos('/', s0);
i2 := pos('/', copy(s0, i1 + 1, length(s0) - i1)) - 1; //要取字符串的长度
s1 := ReverseString(copy(s0, i1 + 1, i2));
ShowMessage(s1);
end;
要睡觉了,随便写了下,你可以根据需要封装成函数循环取你要的
 
function GetArray(Str, SeparStr: string; var Arr: array of string): Integer;
var
nPos1, nPos2, Len: Integer;
begin
Len := Length(Arr);
nPos1 := 0;
for Result := 0 to Len - 1 do
begin
nPos2 := PosEx(SeparStr, Str, nPos1 + 1);
if nPos2 = 0 then nPos2 := Length(Str) + 1;
Arr[Result] := Copy(Str, nPos1 + Length(SeparStr), nPos2 - nPos1 - Length(SeparStr));
nPos1 := PosEx(SeparStr, Str, nPos1 + 1);
if nPos1 = 0 then Break;
end;
Inc(Result);
end;
 
var
Str: string;
Arr: array[0..12] of string;
nCount: Integer;
begin
Str := 'http://www.hnccic.com/ccaa/../BB/2007/长沙/第二期/text.text';
nCount := GetArray(Str, '/', Arr);
end;
 
x:=TStringList.Create;
Str := 'http://www.hnccic.com/ccaa/../BB/2007/长沙/第二期/text.text';
x.Text:=StringReplace(str,'/',#13#10,[rfReplaceAll]);
s4:=x.Strings[x.Count-2];
s3:=x.Strings[x.Count-3];
s2:=x.Strings[x.Count-4];
s1:=x.Strings[x.Count-5];
 
procedure GetPaths(URL: WideString; var S1, S2, S3, S4: WideString);
begin
with TStringList.Create do
try
Delimiter := '/';
DelimitedText := URL;
S4 := Strings[Count - 2];
S3 := Strings[Count - 3];
S2 := Strings[Count - 4];
S1 := Strings[Count - 5];
finally
Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
URL = 'http://www.hnccic.com/ccaa/../BB/2007/长沙/第二期/text.text';
var
S1, S2, S3, S4: WideString;
begin
GetPaths(URL, S1, S2, S3, S4);
{
Memo1.Lines.Add(S1);
Memo1.Lines.Add(S2);
Memo1.Lines.Add(S3);
Memo1.Lines.Add(S4);
}
end;
 
谢谢:jxyghm同仁了,我用你的方法达到我的要求了!同时也谢谢各位参予的同仁!虽然只有3分,不过还是要散分的!每人0.6分!哈哈哈哈哈哈。。。
 
多人接受答案了。
 
后退
顶部