Connecting Tech Pros Worldwide Help | Site Map

string matching position.

  #1  
Old March 26th, 2008, 05:35 PM
Bob Bedford
Guest
 
Posts: n/a
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 helping.

Bob


  #2  
Old March 26th, 2008, 06:55 PM
petersprc
Guest
 
Posts: n/a

re: string matching position.


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.comwrote:
Quote:
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 helping.
>
Bob
  #3  
Old March 26th, 2008, 08:55 PM
Bob Bedford
Guest
 
Posts: n/a

re: string matching position.


Thanks a lot Peter, with your help I've done it.

"petersprc" <petersprc@gmail.coma écrit dans le message de news:
c3299cd2-9bca-483c-a6e3-ff841adc481f...oglegroups.com...
Quote:
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.comwrote:
Quote:
>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 helping.
>>
>Bob
>
>

  #4  
Old March 26th, 2008, 10:55 PM
Alexey Kulentsov
Guest
 
Posts: n/a

re: string matching position.


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'
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
multiple string matching kumarboston answers 8 September 17th, 2007 12:18 AM
Splitting a quoted string. mosscliffe answers 5 May 16th, 2007 02:15 PM
string search and replace int main(void) answers 5 October 11th, 2006 06:45 PM
String pattern matching Jim Lewis answers 9 April 16th, 2006 01:05 PM