Есть файл compiler_test.xml| Код | <?xml version="1.0" encoding="ISO-8859-1"?> <!--MSG-1 configuration version 1.2--> <Root> <IP_config> <Primary_IP>172.19.5.11</Primary_IP> <Primary_mask>16</Primary_mask> <Sup_IP>172.19.5.12</Sup_IP> <Sup_mask>16</Sup_mask> <RTP_IP>172.19.5.13</RTP_IP> <RTP_mask>16</RTP_mask> <Primary_GW>172.19.5.1</Primary_GW> <Sup_GW>172.19.5.1</Sup_GW> <RTP_GW>172.19.5.1</RTP_GW> </IP_config> <SIP_config> <Transport_cfg> <TranspId>0</TranspId> <Port>5060</Port> <Type>0</Type> <QoS>0</QoS> </Transport_cfg> <SIP_route> <Sip_ID>0</Sip_ID> <Domain>DomainTest</Domain> <Transp_ID>0</Transp_ID> <R100_reliable>1</R100_reliable> <Enable_Infotek_SS>0</Enable_Infotek_SS> <MaxCalls>255</MaxCalls> <SIP_proxy> <Name_proxy>sip:ProxyTest</Name_proxy> <Cred> <Type>0</Type> <Realm>RealmTest</Realm> <Scheme>Digest</Scheme> <User>UserTest</User> <Data>PasswdTest</Data> </Cred> </SIP_proxy> <RegURI>RegistrarTest</RegURI> <LocalName>DX500-MSG-1-Test</LocalName> </SIP_route> </SIP_config> <Group_cfg> <Link_ID>0</Link_ID> <ISDN_interface_cfg> <IID>0</IID> <PriBri>0</PriBri> <Mode>0</Mode> <TEI>0</TEI> <SAPI>0</SAPI> <T200>1</T200> <T203>5</T203> <N200>2</N200> <N201>260</N201> <Pd>0</Pd> <Codec_type>0</Codec_type> <T301>1</T301> <T302>1</T302> <T303>1</T303> <T304>1</T304> <T305>1</T305> <T306>1</T306> <T307>1</T307> <T308>1</T308> <T309>1</T309> <T310>1</T310> <T312>1</T312> <T313>1</T313> <T314>1</T314> <T316>1</T316> <T317>1</T317> <T318>1</T318> <T319>1</T319> <T320>1</T320> <T321>1</T321> <T322>1</T322> </ISDN_interface_cfg> <Mg_config> <Amount_of_channels>30</Amount_of_channels> <Initial_port>4000</Initial_port> <RTCP_support>0</RTCP_support> <Qos>0</Qos> <CNG_support>1</CNG_support> <LEC_support>1</LEC_support> <Ob_DTMF_support>1</Ob_DTMF_support> <Fax_over_codec>1</Fax_over_codec> </Mg_config> <Framer_config> <Sync_prio>1</Sync_prio> </Framer_config> </Group_cfg> <Mgc_config> <RtpTimeOut>90</RtpTimeOut> <Codec_priority_PCMU>0</Codec_priority_PCMU> <Codec_priority_PCMA>90</Codec_priority_PCMA> <Codec_priority_G729>100</Codec_priority_G729> <Codec_priority_G726_16>0</Codec_priority_G726_16> <Codec_priority_G726_24>0</Codec_priority_G726_24> <Codec_priority_G726_32>0</Codec_priority_G726_32> <Codec_priority_G726_40>0</Codec_priority_G726_40> </Mgc_config> <Route_config> <Rule> <RouteId>0</RouteId> <Kind>0</Kind> <Rule_type>1</Rule_type> <Reg_exp>abcdf</Reg_exp> <Dst_ID>0</Dst_ID> <Src_ID>0</Src_ID> <Collect_number>5</Collect_number> <Cut_before>0</Cut_before> <Prefix>abcdf</Prefix> <From_domain>abcdefg</From_domain> <To_domain>abcdefg</To_domain> <ProfileId>0</ProfileId> <TrunkId>255</TrunkId> <NumberPlan>1</NumberPlan> <Note>Test from ISDN</Note> </Rule> </Route_config> <Trunk_config> <Trunk> <Trunk_Id>0</Trunk_Id> <IP_Addr>0.0.0.0</IP_Addr> <Amount_of_channels_trunk>30</Amount_of_channels_trunk> <Initial_port_trunk>4000</Initial_port_trunk> <Term_port_trunk>4059</Term_port_trunk> <RTP_Timeout>60</RTP_Timeout> </Trunk> </Trunk_config> <Filter_config> <MAC_filter> <MAC_node> <MAC>11:11:11:11:11:11</MAC> </MAC_node> </MAC_filter> <IP_filter> <IP_node> <IP>172.19.5.2</IP> <Protocol>1</Protocol> <PortFrom>0</PortFrom> <PortTo>0</PortTo> </IP_node> </IP_filter> </Filter_config> </Root>
|
Написал код, который выцепляет поля с числовыми значениями и подставляет в них новые значения и записывает все в новый файл, но в некоторых полях заполняются значения неправильно, например в поле <T200>1</T200> должно быть <T200>256</T200> а получается <T25600>1</T00> Не пойму почему, как так происходит замена? Пока не могу найти ошибку? Спасибо! | Код | #Открываем файл compiler_test.xml в переменную fh_in open($temp,"../compiler_test.xml") || die("Error open compiler_test.xml\n"); my @tmp = <$temp>; my $l_tmp = @tmp;
for($n=0; $n<$l_tmp; $n++) { $tmp[$n] =~ /[A-Za-z0-9]>(.*)?<\/[A-Za-z0-9]/; if($1 && $1 !~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ && $1 !~ /^\d{1,2}\:\d{1,2}\:\d{1,2}\:\d{1,2}\:\d{1,2}\:\d{1,2}$/ && $1 !~ /[A-Za-z]/) { $tmp[$n] =~ /<(.*)?>[0-9]/i; push @fields_int, $1; } elsif($1 && $1 eq 0) { $tmp[$n] =~ /<(.*)?>[0-9]/i; push @fields_int, $1; } }
close $temp;
my $len_t = @fields_int;
for($l = 0; $l < $len_t; $l++) { my $binfile = "test.bin"; #Проверяем есть ли бинарный файл if ( -e "$binfile" ) { system("rm -f $binfile"); }
#Открываем файл compiler_test.xml в переменную fh_in open($fin,"../compiler_test.xml") || die("Error open compiler_test.xml\n"); my $xfile = "$fields_int[$l].xml"; if ( -e $xfile ) { system("rm -f $xfile"); #Открываем файл no_primary_mask.xml на запись open($fout,"> $xfile"); } else { open($fout,"> $xfile"); }
if ($fields_int[$l] eq "Primary_mask" || $fields_int[$l] eq "Sup_mask" || $fields_int[$l] eq "RTP_mask" || $fields_int[$l] eq "Amount_of_channels") { $max = 31; } elsif($fields_int[$l] eq "TranspID" || $fields_int[$l] eq "Sip_ID" || $fields_int[$l] eq "Transp_ID" || $fields_int[$l] eq "Link_ID" || $fields_int[$l] eq "Trunk_ID" || $fields_int[$l] eq "RouteID" || $fields_int[$l] eq "Dst_ID" || $fields_int[$l] eq "Src_ID" || $fields_int[$l] eq "ProfileID") { $max = 255; } elsif($fields_int[$l] eq "QoS" || $fields_int[$l] eq "Qos") { $max = 4; } elsif($fields_int[$l] eq "R100_reliable" || $fields_int[$l] eq "Enable_Infotek_SS" || $fields_int[$l] eq "IID" || $fields_int[$l] eq "PriBri" || $fields_int[$l] eq "Mode" || $fields_int[$l] eq "TEI" || $fields_int[$l] eq "SAPI" || $fields_int[$l] eq "Pd" || $fields_int[$l] eq "Codec_type" || $fields_int[$l] eq "Sync_prio" || $fields_int[$l] eq "RTCP_support" || $fields_int[$l] eq "CNG_support" || $fields_int[$l] eq "LEC_support" || $fields_int[$l] eq "Ob_DTMF__support" || $fields_int[$l] eq "Kind" || $fields_int[$l] eq "Rule_type" || $fields_int[$l] eq "NumberPlan" || $fields_int[$l] eq "Type") { $max = 2; } elsif($fields_int[$l] eq "MaxCalls" || $fields_int[$l] eq "T200" || $fields_int[$l] eq "T203" || $fields_int[$l] eq "N200" || $fields_int[$l] eq "T301" || $fields_int[$l] eq "T302" || $fields_int[$l] eq "T303" || $fields_int[$l] eq "T304" || $fields_int[$l] eq "T305" || $fields_int[$l] eq "T306" || $fields_int[$l] eq "T307" || $fields_int[$l] eq "T308" || $fields_int[$l] eq "T309" || $fields_int[$l] eq "T310" || $fields_int[$l] eq "T312" || $fields_int[$l] eq "T313" || $fields_int[$l] eq "T314" || $fields_int[$l] eq "T316" || $fields_int[$l] eq "T317" || $fields_int[$l] eq "T318" || $fields_int[$l] eq "T319" || $fields_int[$l] eq "T320" || $fields_int[$l] eq "T321" || $fields_int[$l] eq "T322" || $fields_int[$l] eq "Fax_over_codec" || $fields_int[$l] eq "RtpTimeOut" || $fields_int[$l] eq "Codec_priority_PCMU" || $fields_int[$l] eq "Codec_priority_PCMA" || $fields_int[$l] eq "Codec_priority_G729" || $fields_int[$l] eq "Codec_priority_G726_16" || $fields_int[$l] eq "Codec_priority_G726_24" || $fields_int[$l] eq "Codec_priority_G726_32" || $fields_int[$l] eq "Codec_priority_G726_40" || $fields_int[$l] eq "RTP_Timeout" || $fields_int[$l] eq "Collect_number" || $fields_int[$l] eq "Cut_before" || $fields_int[$l] eq "TrunkID") { $max = 256; } elsif($fields_int[$l] eq "N201") { $max = 261; } elsif($fields_int[$l] eq "Protocol") { $max = 18; } else { $max = 65536; }
#Записываем строки файла в масив my @str = <$fin>;
#Подсчитываем количество строк в файле my $count = @str;
my $i = 0;
while ($i < $count) { if ($str[$i] =~ /$fields_int[$l]/g) { $str[$i] =~ /<$fields_int[$l]>(.*)?<\/$fields_int[$l]>/; my $in = $1; $str[$i] =~ s/$in/$max/; print $fout $str[$i]; $i++; } print $fout $str[$i]; $i++; }
#Закрываем файлы close($fin); close($fout);
system("../cfgcomp.elf tobinary test.bin $xfile");
system("rm -f $xfile");
if ( -e $binfile) { system("echo $fields_int[$l]': FAIL' >> $r"); } else { system("echo $fields_int[$l]': success' >> $r"); } }
|
Это сообщение отредактировал(а) NZero - 25.9.2013, 16:24
|