字符串分解高手进!(200分)

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

duwamish

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下的字符串已经读入到listbox中
%WARNING:902: useless IP flag passed
%
% An IP flag (-l, -L, -m, -M, -x, or -c) used without an IP key.

inetnum: 202.96.63.97 - 202.96.63.127
netname: CAIMARNET
descr: CAIMAR Network Engineering Co. Ltd
country: CN
admin-c: HY6-AP
tech-c: HY6-AP
mnt-by: MAINT-CNCGROUP
changed: dmkou@publicf.bta.net.cn 19961014
status: ASSIGNED NON-PORTABLE
source: APNIC
changed: hm-changed@apnic.net 20020827

inetnum: 202.99.102.128 - 202.99.102.191
netname: DTLN
descr: Danfoss Tianjin Ltd.
country: CN
admin-c: JZ2-AP
tech-c: JZ2-AP
mnt-by: MAINT-CNCGROUP
changed: admin@public.tpt.tj.cn 19970516
status: ASSIGNED NON-PORTABLE
source: APNIC
changed: hm-changed@apnic.net 20020827

inetnum: 202.97.232.0 - 202.97.232.127
netname: ISN
descr: Informatin service Network
country: CN
admin-c: JH15-AP
tech-c: JH15-AP
mnt-by: MAINT-CNCGROUP
changed: liuzy@public.hr.hl.cn 19970814
status: ASSIGNED NON-PORTABLE
source: APNIC
changed: hm-changed@apnic.net 20020827
changed: hm-changed@apnic.net 20020827
inetnum: 220.249.0.0 - 220.249.63.255
netname: CNCGROUP-BJ
descr: CNCGROUP Beijing province network
descr: China Network Communications Group Corporation
descr: No.156,Fu-Xing-Men-Nei Street,
descr: Beijing 100031
country: CN
admin-c: CH455-AP
tech-c: QL69-AP
mnt-lower: MAINT-CNCGROUP-BJ17620
status: ALLOCATED NON-PORTABLE
mnt-by: MAINT-CNCGROUP
changed: hm-changed@apnic.net 20050407
source: APNIC

....省略
要求把其中的ip 地址取出来,同时加上子网掩码,子网有3类,如果ip地址是202.99.102.128 - 202.99.102.191前3位相同,为c类,子网掩码为255.255.255.192(192=255-191+128) 如果为b类,如 219.158.32.0 - 219.158.63.255
前2位相同,子网掩码为255.255.224.0 (其中第3个0的计算为255-63+32)
如果是a类 只有1位相同,子网掩码为255.X.0.0 x=255-结束ip的第2位+开始ip的第2位
最后整理成如下格式
202.96.63.97 255.255.255.225
202.99.102.128 255.255.255.192
202.97.232.0 255.255.255.128
202.97.230.0 255.255.255.0
202.97.247.0 255.255.255.0
202.106.120.0 255.255.254.0
202.111.151.80 255.255.255.248
202.111.153.48 255.255.255.240
202.106.138.0 255.255.255.0
202.106.135.0 255.255.255.0
202.106.125.0 255.255.254.0
202.96.18.0 255.255.255.0
202.99.30.112 255.255.255.240
202.96.63.224 255.255.255.224
202.99.31.224 255.255.255.224
202.106.69.32 255.255.255.240
202.99.19.0 255.255.255.0
218.62.0.24 255.255.255.252
...
并重新填充到listbox中,本人对delphi不熟悉,求高手帮个忙,谢谢!!!!!!!!1
 
easy
,帮你写了个代码
function DecodeStr(str: string): string;
var
str1,str2: string;
ts1,ts2:TStrings;
subType: Integer;
i: Integer;
begin
str1 := Trim(Copy(str,Pos('.',str)-3,Pos('-',str)-2));
str2 := Copy(str,Pos('-',str)+2,Length(str)-Pos('-',str)-1);
ts1 := TStringList.Create;
ts2 := TStringList.Create;
ts1.Delimiter := '.';
ts1.DelimitedText := str1;
ts2.Delimiter := '.';
ts2.DelimitedText := str2;

subType := 0;
for I := 0 to 2 do
if(ts1.Strings=ts2.Strings) then
Inc(subType);

case subType of
1: str1 := str1+Format(' 255.%d.0.0',[Byte(255-StrToInt(ts2.strings[1])+StrToInt(ts1.Strings[1]))]);
2: str1 := str1+Format(' 255.255.%d.0',[Byte(255-StrToInt(ts2.strings[2])+StrToInt(ts1.Strings[2]))]);

3: str1 := str1+Format(' 255.255.255.%d',[Byte(255-StrToInt(ts2.strings[3])+StrToInt(ts1.Strings[3]))]);

end;
ts1.Free;
ts2.Free;
result := str1;
end;
var
i: Integer;
begin
for i := 0 to Listbox1.Count - 1 do
if Pos('inetnum',ListBox1.Items)>0 then
ListBox2.Items.Add(DecodeStr(ListBox1.Items));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var list1:TStringlist;
s,s1,s2,s3,s4,s11,s12,s13,s14: string;
i: integer;
procedure pos1(str1: string; var str1,str2: string);
var j: word;
begin
j:=pos(str1,str1);
if j=0 then
begin
str2:=str1 ;
str1:='';
end else begin
str2:=copy(str2,1,j-1);
delete(str1,1,j);
end;
str1:=trim(str1);
str2:=trim(str2);
end;

begin
list1:=TStringlist.Create;
for i:=0 to listbox1.Items.Count-1 do begin
s:=listbox1.Items;
if pos('inetnum:',s)<>0 then begin
delete(s,1,length('inetnum:');
s:= trim(s);
pos1('.',s,s1);
pos1('.',s,s2);
pos1('.',s,s3);
pos1('-',s,s4);
pos1('.',s,s11);
pos1('.',s,s12);
pos1('.',s,s13);
s14:=s;
if (s1=s11) and (s2=s12) and (s3=s13) then begin
s14:=inttostr(255-strtoint(s14)+strtoint(4));
list1.Add(s1+'.'+s2+'.'+s3+'.'+s4+' '+s1+'.'+s2+'.'+s3+'.'+s14);
continue;
end;

if (s1=s11) and (s2=s12) then begin
s13:=inttostr(255-strtoint(s13)+strtoint(3));
list1.Add(s1+'.'+s2+'.'+s3+'.'+s4+' '+s1+'.'+s2+'.'+s13+'.0');
continue;
end;

if s1=s11 then begin
s12:=inttostr(255-strtoint(s12)+strtoint(2));
list1.Add(s1+'.'+s2+'.'+s3+'.'+s4+' '+s1+'.'+s12+'.0.0');
continue;
end;
end;

listbox1.Items:=list1;
list1.Free;
end;
 
多人接受答案了。
 
后退
顶部