从字符串中提取内容 急!!!(50分)

  • 主题发起人 主题发起人 deg
  • 开始时间 开始时间
D

deg

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个循环,在一个字符串中查找自己定义的字符,找到后删掉字符串部分内容,
例如现有一个字符串为:‘//Server/e/Image/Audi A6tu/01-01.jpg’,在这个字符串里
循环查找‘/’,每次找到后就把‘/’前面所有字符删掉(包括‘/’),完成后得到字符串‘01-01.jpg’。
请教各位高手应怎样实现,多谢!!!
 
字符串的过程和函数

  1.Insert(obj,target,pos)
  本过程把字符串target插入在pos的位置上。如果插入的结果大于target的最大长度,则多出字符将被截掉。如果Pos在255以外,会产生运行错。例如,st:='Brian',则Insert('OK',st,2)会使st变为'BrOKian'。

  2.Delete(st,pos,Num)
  该过程从st串中的pos(整型)位置开始删去个数为Num(整型)个字符的子字串。例如,st:='Brian',则Delete(st,3,2)将变为Brn。

  3.Str(value,st)
  该过程将数值value(整型或实型)转换成字符串放在st中。例如,a=2.5E4时,则str(a:10,st)将使st的值为' 25000'。

  4.Val(st,var,code)
  该过程把字符串表达式st转换为对应整型或实型数值,存放在var中。St必须是一个表示数值的字符串,并符合数值常数的规则。在转换过程中,如果没有检测出错误,变量code置为0,否则置为第一个出错字符的位置。例如,st:=25.4E3,x是一个实型变量,则val(st,x,code)将使X值为25400,code值为0。

  5.Copy(st.pos.num)
  该函数返回st串中一个位置pos(整型)处开始的,含有num(整型)个字符的子串。如果pos大于st字符串的长度,那就会返回一个空串,如果pos在255以外,会引起运行错误。例如,st:='Brian',则Copy(st,2,2)返回'ri'。

  6.Concat(st1,st2,st3……,stn)
  该函数把所有自变量表示出的字符串按所给出的顺序连接起来,并返回连接后的值。如果结果的长度255,将产生运行错误。例如,st1:='Brian',st2:=' ',st3:='Wilfred',则Concat(st1,st2,st3)返回'Brian Wilfred'。

  7.Length(st) 该函数返回字符串表达式st的长度。例如,st:='Brian',则Length(st)返回值为5。

  8.Pos(obj,target) 该函数返回字符串obj在目标字符串target的第一次出现的位置,如果target没有匹配的串,Pos函数的返回值为0。例如,target:='Brian Wilfred',则Pos('Wil',target)的返回值是7,Pos('hurbet',target)的返回值是0。
 
用得着吗?
用extractfilename搞掂,收分:)
想知道怎么写就看源码,^_^
 

var
I:integer;
S:string;
begin
S:='//Server/e/Image/Audi A6tu/01-01.jpg';
for I:=Length(S) downto 0 do
if S='/' then break;
edit1.text:=copy(S,I+1,length(S));

按你的要求写的了,快给我分吧!!
 
纠正一个不太好的程序风格:)
var
I:integer;
S:string;
begin
S:='//Server/e/Image/Audi A6tu/01-01.jpg';
for I:=Length(S) downto 1 do //是1而不是0, 多做了一次不必要的循环
if S='/' then break;
edit1.text:=copy(S,I+1,length(S));

 
谁说房客提供的函数没用?请看:
var
i:integer;
S:string;
begin
S:='//Server/e/Image/Audi A6tu/01-01.jpg';
i:=pos('/',S);
while i>0 do
begin
delete(s,1,i);
i:=pos('/',S);
end;
edit1.text:=S;
end;
 
to deg:
eyes4的办法非常好,我在程序中经常采用,因为这不仅仅
是字符而且字符串也行,所以我建议你能采用eyes4的办法.
 
to eyes4:
不是说没用,是犯不着,是一个函数可以做到的不用再自己写了,
如果看源码的话可以发现Delphi带的LastDelimiter函数更通用,
可以指定分隔符,而且可以指定多个分隔符,extractfilename
就是调用LastDelimiter的。
Delphi都已经做了而且做的很好,还有必要在做吗?
 
to:DoubleWood
用ExtractFileName的确要方便一些:
function ExtractFileName(const FileName: string): string;
var
I: Integer;
begin
I := LastDelimiter('/:', FileName);
^^^^^^^^^^^^^
Result := Copy(FileName, I + 1, MaxInt);
end;
 
多谢各位,只是分太少了,eyes4的方法确实不错,希望有机会多交流,再次感谢!
 
后退
顶部