Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old March 26th, 2008, 05:35 PM
Bob Bedford
Guest
 
Posts: n/a
Default string matching position.

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
Default 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
Default 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
Default 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'
 

Bookmarks

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles