Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Problem with array

by kepler (Scribe)
on May 24, 2011 at 08:10 UTC ( #906447=perlquestion: print w/replies, xml ) Need Help??
kepler has asked for the wisdom of the Perl Monks concerning the following question:



I've got a script that searches a database and gives a result, something like this:

porto|1|38.783333|-9.2|PO|14||Porto| porto|1|41.15|-8.616667|PO|17||Porto| porto|1|39.066667|-9.033333|PO|14||Porto| porto|1|42.016667|-8.45|PO|20||Porto| porto|1|39.866667|-8|PO|06||Porto|

Also I have an array %codes in the form "PO14","Lisboa", "PO17","Porto", etc

When I join PO to 14 for example and go to $codes{"PO14} it matches - it gives me Lisbon region; but it will ignore the PO17; only the PO20 will be read and will ignore the PO06...

Does anyone has any idea why?

Kind regards, Kepler

Replies are listed 'Best First'.
Re: Problem with array
by Corion (Pope) on May 24, 2011 at 08:13 UTC

    I would assume that the problem is in your code. Please help us to help you better and show a 10 to 15 line program that parses your data and exhibits the problem you see.

    Without seeing your code, we can only guess as to where you might be skipping every other line, and why.

      Hi, Here it is:
      $listdata="results.txt"; open (list, "<$listdata") or &error("Unable to open the data file for +reading"); while (<list>){ my($line) = $_; chomp $line; ($abreviatura,$regiao,$latitude,$longitude,$pais,$admin1,$admin2,$cida +de) = split(/\|/,$line); if ($abreviatura =~ /^$localidade/ ){ if ((length($localidade) < 2) & (length($abreviatura) > 1)) { goto cont; } if ((length($nexacto)>1) & (length($localidade) < length($abreviatura) +)){ goto cont; } if ((length($country_code) < 3) & ($country_code !~ /$pais/gi )){ goto cont; } $cc = $pais; $adm1= uc ($pais.$admin1); if (length($adm1) < 3){ $adm1 ="N/A"; } $adm2 = $admin2; if ($pais !~ /US/gi){ $adm2=$pais.$admin2; } if (length($adm2) < 3){ $adm2 ="N/A"; } $pais = $codes{$pais}; if (length($pais) < 1){ $pais = $cc; $adm1 = $codes{$adm1}; if ($cc !~ /US/gi){ $adm2 = $codes{$adm2}; } if (length($adm1) < 1){ $adm1 ="N/A"; } if (length($adm2) < 1){ $adm2 ="N/A"; } ....starts showing results...
      Kind regards, Kepler

        You show a very incomplete piece of code that is even missing the label cont. I'm not sure what this piece of code is supposed to do or how or where I could see that it is skipping every second line.

        Please remove irrelevant parts of your code, and add the parts that show the results you get.

        As an aside, please also do work on your indentation. Your code is very hard to read for me:

        if (length($pais) < 1){ $pais = $cc; $adm1 = $codes{$adm1}; if ($cc !~ /US/gi){ $adm2 = $codes{$adm2}; } ...

        is much easier to read when formatted as

        if (length($pais) < 1){ $pais = $cc; $adm1 = $codes{$adm1}; if ($cc !~ /US/gi){ $adm2 = $codes{$adm2}; } ...

        That way, it becomes clear where each if block begins and ends.

        Further to Corions' most salient observations, I would suggest the use of
        use warnings; use strict;
        In that way, you'd discover or, more accurately perl would tell you, that certain of the variables are not declared and initialised before use e.g. $localidade ...

        A user level that continues to overstate my experience :-))
Re: Problem with array
by rovf (Priest) on May 24, 2011 at 13:59 UTC

      kepler did the same type of reposting on a post a few days ago and when it was pointed out to him responded with sorry, didn't know not to do that.

      This time he did know and did it anyway. Clueless, I have no problem with. Rude, I do.

      "Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://906447]
Approved by mertserger
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (2)
As of 2017-11-19 05:19 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (278 votes). Check out past polls.