Thanks John, and Rob.
This reply is quite close to what I am going to do,
but some critical point is wanted here.... I'll try to explain
my question further....
>
> > That's about the whole story, but I'll make it short.
> > For example, I have a list like this :
> >
> > 123ABCDEF456
> > 123456
> > 654WXYZ321
> > 987654321
> > ABCDEF123456
> > WXYZ321
> >
> > By user's INTEGER input , I will have to find how many similar
> > patterns are matched within the list according to certain chars (user's
> > input ) :
> >
> > For example, I input '3', then I will get the result like this :
> >
> > Res1: 123ABCDEF456 is similar to 123456
> > Res2: 123ABCDEF456 is similar to ABCDEF123456
> > Res3: 654WXYZ321 is similar to 987654321
> > Res4: 654WXYZ321 is similar to WXYZ321
> >
> > In case , if a pattern match happens, then the elem in list will not
> > be shown again even another match happens. Okay, thaz my
> > homework for how to deal with the output.
> >
> > The question I want to ask is how to tell ( or is this a good starting
> > point ) the regex to compare the patterns freely ? So I can get
> > 654WXYZ321 match 987654321 and also match WXYZ321 ?
> >
> > I hope I can explain my question well.
>
> I'm not sure exactly what you want but maybe this will give you some
ideas:
>
It does, and thaz about my coding currently up to.....
> #!/usr/bin/perl
> use warnings;
> use strict;
>
> my @data = qw(
> 123ABCDEF456
> 123456
> 654WXYZ321
> 987654321
> ABCDEF123456
> WXYZ321
> );
>
> for my $x ( @data ) {
> for my $y ( @data ) {
> next if $x eq $y or length( $x ) < length( $y );
> my $count = () = $x =~ /[\Q$y\E]/g;
> my $perc = ( $count / length $x ) * 100;
> printf "%-12s %-12s %2d %2d %6.2f %%\n", $x, $y, length $x,
$count, $perc;
> }
> }
>
> __END__
>
> Produces this output:
>
> 123ABCDEF456 123456 12 6 50.00 %
> 123ABCDEF456 654WXYZ321 12 6 50.00 %
For what I want, this is not a match.
if my input is 3, than, the scanning process is like this :
123 compare 654WXYZ321 = false
23A compare 654WXYZ321 = false
3AB compare 654WXYZ321 = false
ABC compare 654WXYZ321 = false
...
...
456 cmp 654WXYZ321 = false
In case, 3 means, each 3 chars from the string formed a pattern
and trying to compare with elems in the list.
> 123ABCDEF456 987654321 12 6 50.00 %
> 123ABCDEF456 ABCDEF123456 12 12 100.00 %
> 123ABCDEF456 WXYZ321 12 3 25.00 %
> 654WXYZ321 123456 10 6 60.00 %
> 654WXYZ321 987654321 10 6 60.00 %
> 654WXYZ321 WXYZ321 10 7 70.00 %
> 987654321 123456 9 6 66.67 %
> 987654321 WXYZ321 9 3 33.33 %
> ABCDEF123456 123ABCDEF456 12 12 100.00 %
> ABCDEF123456 123456 12 6 50.00 %
> ABCDEF123456 654WXYZ321 12 6 50.00 %
> ABCDEF123456 987654321 12 6 50.00 %
> ABCDEF123456 WXYZ321 12 3 25.00 %
> WXYZ321 123456 7 3 42.86 %
>
Evaluate from the result, matching is by char based. So,
ZXCVBNM is 100 % match MNBVCXZ...... but for
what I am trying to compare will treat this 0 % match.....
unless my input is '1'
I hope I can explain my question well this time, thanks for
any further advise..... =)
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]