|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Hello,
I've a string and all sort of values in wich I've to check and return the correct value. Here is a sample (simplified as I've a huge amount of datas): code = 1 subcode 65 values 06101;06102;06103;06106;06108;06109 subcode 69 values 07003;07004;07007;07008;07009;07012;07013 code = 2 subcode 65 values 61215;61218;61558;61587 subcode 69 values 83662:83667;83668 Now I've a given code and value and I need to know the subcode. I mean if I give the function code=1 and value = 06108 then the function should return 65 if I give the function code=2 and value = 83668 then the returned subcode must be 69 How to do so ? Thanks for ing. Bob |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Hi,
You need a small routine to parse the data into an array. This script will do it: <? function parseData($txt) { $lines = split("\n", $txt); $codes = array(); $code = null; for ($i = 0; $i < count($lines); $i++) { $line = $lines[$i]; if (preg_match('/^code = (\d+)$/', $line, $m)) { $code = $m[1]; } elseif (preg_match('/^subcode (\d+) values ((?:\d+ *(?:\d+))$/', $line, $m)) { if (is_null($code)) { throw new Exception('No code set at line ' . ($i + 1) . '.'); } $vals = split(';', $m[2]); foreach ($vals as $val) { $codes[$code][$val] = $m[1]; } } elseif ($line == '') { if (is_null($code)) { throw new Exception('Unexpected empty line at line ' . ($i + 1) . '.'); } $code = null; } else { throw new Exception('Unable to process line ' . ($i + 1) . '.'); } } return $codes; } function getSubcode($codes, $code, $val) { return isset($codes[$code]) && isset($codes[$code][$val]) ? $codes[$code][$val] : false; } function test() { $txt = <<<end code = 1 subcode 65 values 06101;06102;06103;06106;06108;06109 subcode 69 values 07003;07004;07007;07008;07009;07012;07013 code = 2 subcode 65 values 61215;61218;61558;61587 subcode 69 values 83662;83667;83668 end; $codes = parseData($txt); echo "Subcode for code 1 and value 06108 is " . getSubcode($codes, 1, '06108') . ".<br>\n"; echo "Subcode for code 2 and value 83668 is " . getSubcode($codes, 2, '83668') . ".<br>\n"; echo "Subcode for code 3 and value 12345 is " . getSubcode($codes, 3, '12345') . ".<br>\n"; } test(); ?> On Mar 26, 12:22 pm, "Bob Bedford" <b...@bedford.com> wrote: > Hello, > > I've a string and all sort of values in wich I've to check and return the > correct value. > > Here is a sample (simplified as I've a huge amount of datas): > > code = 1 > subcode 65 values 06101;06102;06103;06106;06108;06109 > subcode 69 values 07003;07004;07007;07008;07009;07012;07013 > > code = 2 > subcode 65 values 61215;61218;61558;61587 > subcode 69 values 83662:83667;83668 > > Now I've a given code and value and I need to know the subcode. > > I mean if I give the function code=1 and value = 06108 then the function > should return 65 > if I give the function code=2 and value = 83668 then the returned subcode > must be 69 > > How to do so ? > > Thanks for ing. > > Bob |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Thanks a lot Peter, with your I've done it.
"petersprc" <petersprc@gmail.com> a écrit dans le message de news: c3299cd2-9bca-483c-a6e3-ff841adc481f...oglegroups.com... > Hi, > > You need a small routine to parse the data into an array. > > This script will do it: > > <? > > function parseData($txt) > { > $lines = split("\n", $txt); > $codes = array(); > $code = null; > > for ($i = 0; $i < count($lines); $i++) { > $line = $lines[$i]; > if (preg_match('/^code = (\d+)$/', $line, $m)) { > $code = $m[1]; > } elseif (preg_match('/^subcode (\d+) values ((?:\d+ *(?:\d+))> $/', > $line, $m)) { > if (is_null($code)) { > throw new Exception('No code set at line ' . ($i + 1) . '.'); > } > $vals = split(';', $m[2]); > foreach ($vals as $val) { > $codes[$code][$val] = $m[1]; > } > } elseif ($line == '') { > if (is_null($code)) { > throw new Exception('Unexpected empty line at line ' . > ($i + 1) . '.'); > } > $code = null; > } else { > throw new Exception('Unable to process line ' . ($i + 1) . '.'); > } > } > > return $codes; > } > > function getSubcode($codes, $code, $val) > { > return isset($codes[$code]) && isset($codes[$code][$val]) ? > $codes[$code][$val] : false; > } > > function test() > { > $txt = <<<end > code = 1 > subcode 65 values 06101;06102;06103;06106;06108;06109 > subcode 69 values 07003;07004;07007;07008;07009;07012;07013 > > code = 2 > subcode 65 values 61215;61218;61558;61587 > subcode 69 values 83662;83667;83668 > > end; > > $codes = parseData($txt); > > echo "Subcode for code 1 and value 06108 is " . > getSubcode($codes, 1, '06108') . ".<br>\n"; > > echo "Subcode for code 2 and value 83668 is " . > getSubcode($codes, 2, '83668') . ".<br>\n"; > > echo "Subcode for code 3 and value 12345 is " . > getSubcode($codes, 3, '12345') . ".<br>\n"; > } > > test(); > > ?> > > On Mar 26, 12:22 pm, "Bob Bedford" <b...@bedford.com> wrote: >> Hello, >> >> I've a string and all sort of values in wich I've to check and return the >> correct value. >> >> Here is a sample (simplified as I've a huge amount of datas): >> >> code = 1 >> subcode 65 values 06101;06102;06103;06106;06108;06109 >> subcode 69 values 07003;07004;07007;07008;07009;07012;07013 >> >> code = 2 >> subcode 65 values 61215;61218;61558;61587 >> subcode 69 values 83662:83667;83668 >> >> Now I've a given code and value and I need to know the subcode. >> >> I mean if I give the function code=1 and value = 06108 then the function >> should return 65 >> if I give the function code=2 and value = 83668 then the returned subcode >> must be 69 >> >> How to do so ? >> >> Thanks for ing. >> >> Bob > > |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
quick&dirty solution
<?php $data=<<<EOD code = 1 subcode 65 values 06101;06102;06103;06106;06108;06109 subcode 69 values 07003;07004;07007;07008;07009;07012;07013 code = 2 subcode 65 values 61215;61218;61558;61587 subcode 69 values 83662;83667;83668 EOD; // search function function smart_search($data,$code,$value) { preg_match("/^code = {$code}[^=]+subcode (\\d+) values [;\\d]*$value/m",$data,$res); return isset($res[1]) ? $res[1] : false; } // test it foreach(array('06101'=>1,'06103'=>1,'06109'=>1,'07 009'=>1,'07013'=>1 ,'61215'=>2,'61587'=>2,'83668'=>2) as $value=>$code) echo $value.' '.$code.' : '.smart_search($data,$code,$value)."\n"; ?> I think here was mistake in string 'subcode 69 values 83662:83667;83668' |
|
![]() |
| Outils de la discussion | |
|
|