怎样返回一个文件名中的数字(40分)

  • 主题发起人 主题发起人 Delphi刘
  • 开始时间 开始时间
D

Delphi刘

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样返回一个文件名中的数字
如:中华人民共和国53周年.txt
怎样把53提出来

我没分了
请问怎样赚分
谢谢
 
在线等待啊
有没有人帮忙
 
转换成字符型后,每次截取一个字符判断是否在数字区域内[blue][/blue]
 
//以下这段程序将字符串中数字和非数字分开:
//如:"今天是2002年1月1日",结果是:
//今天是
//2002
//年
//1
//月
//1
//日
procedure Str2NumberList(const iStr :string; oList :TStrings);
var
bn :Boolean;
i :Integer;
ns :string;
begin
oList.Clear;
if Length(iStr) > 0 then begin
ns := '';
bn := False;
for i := 1 to Length(iStr) do
if ns = '' then begin
ns := iStr;
bn := iStr in ['0'..'9'];
end else if (iStr in ['0'..'9']) = bn then
ns := ns + iStr
else begin
bn := not bn;
oList.Add(ns);
ns := iStr;
end;
if ns <> '' then
oList.Add(ns);
end;
end;
 
中文是WideString,求长度仍然用Length()函数,以下的代码不知道对你有没有帮助
procedure TForm1.Button1Click(Sender: TObject);
var
str:widestring;
i:integer;
str1:string;//用于纪录数字
begin
str:='中华人民共和国53周年.txt';
i:=Length(str);
str1:=EmptyStr;
for i:= 1 to Length(str) do
begin
if(str='0')or(str='1')or(str='2')or(str='3')
or(str='4')or(str='5')or(str='6')or(str='7')
or(str='8')or(str='9') then//如果用(str in ['0'..'9'])会报告错误
str1:=str1+str;
end;
Memo1.Lines.Add(str1);
end;
 
这种程序完全可以自个儿写,因为是一个文件名,所以,字符串的长度不大,将文件名
分成一个个的字符去比较也不费什么时!
 
type
TCharSet = set of Char;

function StripNonConforming(const S: string;
const ValidChars: TCharSet): string;
var
DestI: Integer;
SourceI: Integer;
begin
SetLength(Result, Length(S));
DestI := 0;
for SourceI := 1 to Length(S) do
if S[SourceI] in ValidChars then
begin
Inc(DestI);
Result[DestI] := S[SourceI]
end;
SetLength(Result, DestI)
end;

function StripNonNumeric(const S: string): string;
begin
Result := StripNonConforming(S, ['0'..'9'])
end;

 
对 chuguozhen 的改写

var
str:widestring;
i:integer;
str1:string;//用于纪录数字
begin
str:='中华人民共和国53周年.txt';
i:=Length(str);
str1:=EmptyStr;
for i:= 1 to Length(str) do
begin
if (str in [widechar('0')..widechar('9')]) then ///////////////////
str1:=str1+str;
end;
Memo1.Lines.Add(str1);
end;
 
后退
顶部