in reply to Problem with array

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.

Replies are listed 'Best First'.
Re^2: Problem with array
by kepler (Scribe) on May 24, 2011 at 08:54 UTC
    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 :-))