Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

I ran your program which output:

Not ok cases N65, N25 N65, N25 too many lats or lons Err: 1 65P, E25 65P, E25 too many lats or lons Err: 1 91, 47 91, 47 numbers are too big LAT: 91 LON: 47 65P, W25 65P, W25 mixed languages Err: 1 100 E, 91 N N91 ,E100 numbers are too big LAT: 91 LON: 100 47.9805, -186.5586 47.9805, -186.5586 numbers are too big LAT: 47.9805 LON: -186.5586

You have 13 error tests in your program:

1: 74 if(($ENG >0) && ($FIN > 0)) { 75 print "mixed languages\n"; 76 $err++ 77 } 2: 78 elsif (($FIN>0) && ( ($H{I}+$H{L})>1 || ($H{E}+$H{P})> +1 )) { 79 print "too many lats or lons\n"; 80 $err++ 81 } 3: 82 elsif (($ENG>0) && ( ($H{N}+$H{S})>1 || ($H{W}+$H{E})> +1 )) { 83 print "too many lats or lons\n"; 84 $err++ 85 } 4: 86 elsif ($H{E}>1) { 87 print "too many E\n"; 88 $err++ 89 } 5: 90 elsif ($H{I}>1) { 91 print "too many I\n"; 92 $err++ 93 } 6: 94 elsif ($H{L}>1) { 95 print "too many L\n"; 96 $err++ 97 } 7: 98 elsif ($H{P}>1) { 99 print "too many P\n"; 100 $err++ 101 } 8: 102 elsif ($H{W}>1) { 103 print "too many W\n"; 104 $err++ 105 } 9: 106 elsif ($H{S}>1) { 107 print "too many S\n"; 108 $err++ 109 } 10: 110 elsif ($H{N}>1) { 111 print "too many N\n"; 112 $err++ 113 } ... 11: 133 elsif ($comma_count > 3) { 134 print "too many commas\n"; 135 $err++ 136 } 12: 137 elsif ($dot_count > 2) { 138 print "too many dots\n"; 139 $err++; 140 } ... 13: 169 if ($coords =~ /^[-+]?([1-8]?\d(\.\d+)?|90(\.0 ++)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)? 169 )$/) +{ 170 print "all ok\n"; 171 } else { 172 print "too big numbers\n"; 173 }

But only 1, 2, 3 and 13 are actually tested for in your test data.

Also, tests 4 through 10 can be combined into one test:

elsif ( my @keys = grep $H{ $_ } > 1, keys %H ) { for ( @keys ) { print "too many $_\n"; $err++ } }

Although this test will never execute because tests 2 and 3 take presedense.

Also this:

30 my %H; ... 61 $H{E} = ($_ =~ tr/E//); 62 63 $H{I} = ($_ =~ tr/I//); 64 $H{P} = ($_ =~ tr/P//); 65 $H{L} = ($_ =~ tr/L//); 66 67 $H{W} = ($_ =~ tr/W//); 68 $H{N} = ($_ =~ tr/N//); 69 $H{S} = ($_ =~ tr/S//);

Could be simplified a bit:

my %H = ( E => tr/E//, I => tr/I//, P => tr/P//, L => tr/L//, W => tr/W//, N => tr/N//, S => tr/S//, );

And finally, you use tr/// for counting but you could also use it in a few other places:

7 $in =~ s/[NWSEIPL]//g; $in =~ tr/NWSEIPL//d; 39 s/[^0-9NWSEIPL,.+-]/ /g; tr/0-9NWSEIPL,.+-/ /c; 122 s/ /./g; tr/ /./; 126 s/,/./g; tr/,/./; 148 s/[NE]//g; tr/NE//d; 156 s/[IP]//g; tr/IP//d;

In reply to Re: Coordinate validator by jwkrahn
in thread Coordinate validator by timpoiko

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2024-04-19 04:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found