精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>Object Pascal语言>>字符串与数组之间的转换处理函数

主题:字符串与数组之间的转换处理函数
发信人: plenilune88(望月)
整理人: soaringbird(2002-02-02 09:05:14), 站内信件
这是Delphi中字符串与数组之间的转换处理函数,提供类似于VB中的相关函数功能

function StrToDim(S,Separator:string):Variant;
                                        //字符串转换为数组
function DimToStr(d:Variant;Separator:string):string;
                                        //数组合成字符串
function IsDim(d:Variant):boolean;      //判断是否为数据变量
function DimLBound(d:Variant):integer;  //数组下限
function DimHBound(d:Variant):integer;  //数祖上限
function DimCount(d:Variant):integer;   //数组长度

//-----------------------------------------------------
function StrExistsCount(S,Sub:string;CanRepeat:boolean;IsCaseSensitive:boolean):integer;
var i,j:integer;
    s1:string;
    len:integer;
begin  //一个字符串在另一个字符串中出现的次数
  Result:=0;
  if length(s)<length(sub) then exit;
j:=0;
len:=length(sub);
if IsCaseSensitive then
s1:=sub
else
s1:=LowerCase(sub);

if CanRepeat then
begin
for i:=1 to length(s)-len+1 do
begin
if IsCaseSensitive then
begin
if copy(s,i,len)=s1 then inc(j)
end
else
begin
if LowerCase(copy(s,i,len))=s1 then inc(j)
end;
end;
end
else
begin
i:=1;
while i<=length(s)-len+1 do
begin
if IsCaseSensitive then
begin
if copy(s,i,len)=s1 then
begin
inc(j);
i:=i+len;
Continue;
end;
end
else
begin
if LowerCase(copy(s,i,len))=s1 then
begin
inc(j);
i:=i+len;
Continue;
end;
end;
inc(i);
end;
end;
Result:=j;
end;

function StrToDim(S,Separator:string):Variant;
var d:Variant;
i,j,k,len,len1,l:integer;
begin //字符串转换为数组
Result:=Null;
if s='' then exit;
s:=s+separator;
l:=StrExistsCount(s,separator,false,false);
separator:=LowerCase(separator);
len:=length(s);
len1:=length(Separator);
k:=0;
d:=VarArrayCreate([0,l],varVariant);
i:=1;
while i<=len-len1 do
begin
for j:=i to len do
if LowerCase(Copy(s,j,len1))=separator then
begin
d[k]:=copy(s,i,j-i);
inc(k);
break;
end;
i:=j+len1;
end;
Result:=d;
end;

function DimToStr(d:Variant;Separator:string):string;
var i:integer;
s:string;
begin //数组合成字符串
s:='';
if VarIsArray(d) then
for i:=DimLBound(d) to DimHBound(d) do
s:=s+String(d[i])+Separator;
if s<>'' then s:=','+s;
  Result:=s;
end;

function IsDim(d:Variant):boolean;
begin  //判断是否为数据变量
  Result:=VarIsArray(d);
end;

function DimLBound(d:Variant):integer;
begin  //数组下限
  if VarIsArray(d) then
    Result:=VarArrayLowBound(d,1)
  else
    Result:=-1;  
end;

function DimHBound(d:Variant):integer;
begin  //数祖上限
  if VarIsArray(d) then
    Result:=VarArrayHighBound(d,1)
  else
    Result:=-1;  
end;

function DimCount(d:Variant):integer;
begin  //数组长度
  Result:=VarArrayDimCount(d);
end;

//中大方略版权所有
//www.cnflag.net


----
                .-'''''-.
             .'         `.
            :             :
           :               :
           :      _/|      :
            :   =/_/      :
             `._/ |     .'
          (   /  ,|...-'
           \_/^\/||__
        _/~  `""~`"` \_
     __/  -'/  `-._ `\_\__
   /     /-'`  `\   \  \-.\ 

孤意望月 血泪无痕 

http://plenilune.top263.net
http://www.cnflag.net  

[关闭][返回]