Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Unpacking Problem Causing Strange Output

Posted on 2000-05-05
19
Medium Priority
?
221 Views
Last Modified: 2010-03-05
Following is the code:

#usr/local/bin/perl -w

open INPUT,"</home/tmclaugh/oag/bin/ein99" or die "can't open ein99 $!";
open ONE,">/home/tmclaugh/oag/bin/step_one_flight.dbload" or die "can't open step_one_flight $!";
open TWO,">/home/tmclaugh/oag/bin/flight.dbload" or die "can't open flight.dbload $!";

$UID='00000000';
while( <INPUT> ){
                    @strings{qw(
                  departure_country_code
                  departure_airport_id
                  departure_local_time
                  departure_gmt_time
                  arrival_country_code
                  arrival_airport_code
                  arrival_local_time
                  arrival_gmt_time
                  aircraft_type
                  air_carrier_id
                  flight_number
                  operator_type
                  elapsed_time
                  ata_carrier_id
                  seats
                  departure_airport_latitude
                  departure_airport_longitude
                  arrival_airport_latitude
                  arrival_airport_longitude
                  ata_departure_airport_id
                  ata_arrival_airport_id
                  carrier_code
                  carrier_type
                  ata_aircraft_type
                  equipment_type
                  arrival_city
                  air_carrier_full_name
                  center
                  distance
                  departure_city
                  arrival_country
                  departure_country
                  year
                  month
                  day                     
                          )}=unpack('
                     @0a4
                  @4a4
                  x1
                  @9a4
                  @13a4
                  @17a4
                  @21a4
                  x1
                  @26a4
                  x1
                  @31a4
                  @35a4
                  @40a1
                  @41a3
                  @43a5
                  x7
                  x1
                  @61a1
                  @62a4
                  x4
                  x4
                  @74a3
                  @77a3
                  @80a6
                  @86a6
                  @92a6
                  @98a6
                  @104a3
                  @108a3
                  @112a2
                  @114a1
                  @115a3
                  @118a1
                  @119a27
                  @146a27
                  @173a3
                  @176a5
                  @181a27
                  @208a27
                  @235a27
                  @262a4
                  @266a2
                  @268a31      
                          ',$_);
                   
      @day=(0,split//,$strings{day});
                          for ( grep $day[$_],1..31 ){
                                $strings{day}=substr"0$_",-2;
                                ++$UID;
                                print ONE join("|",$UID,@strings{qw(
                                      month
                                      day
                                      year
                                      departure_local_time
                              departure_gmt_time
                              arrival_local_time
                              arrival_gmt_time
                              departure_airport_id
                              arrival_airport_id
                              aircraft_type
                              air_carrier_id
                              flight_number
                              distance
                              elapsed_time
                              ata_carrier_id
                              air_carrier_full_name
                              operator_type
                                        carrier_type
                                      carrier_code
                                        departure_airport_logitude
                                        arrival_airport_longitude
                                        ata_airport_id
                                        equipment_type
                                        departure_country
                                        arrival_country
                                      )}),"\n";
                   
                  print TWO join("|",,
                        join('',@strings{qw(month)},"$UID"),
                                join('',@strings{qw(month day year)},"_$strings{departure_local_time}"),
                                join('',@strings{qw(month day year)},"_$strings{departure_gmt_time}"),
                                join('',@strings{qw(month day year)},"_$strings{arrival_local_time}"),
                                join('',@strings{qw(month day year)},"_$strings{arrival_gmt_time}"),
                        @strings{qw(
                                departure_airport_id
                              arrival_airport_id
                              aircraft_type
                              air_carrier_id
                              flight_number
                              distance
                              elapsed_time
                              ata_carrier_id
                              air_carrier_full_name
                              operator_type
                                        carrier_type
                                      carrier_code
                                        departure_airport_logitude
                                        arrival_airport_longitude
                                        ata_airport_id
                                        equipment_type
                                        departure_country
                                        arrival_country
                                )}),"\n";
                   
                                }
                    }



Following is an example of the input:
4410KIR  060506054410EIDW 070000700F50 AEIN00021     0111111  0055              51186003426}51636002250}KIR DUB EI F50T    AER LINGUS                                                                                                                                 1999011101111110111111011111101111110 26
4410EIDW 124012404410KIR  134501345F50 AEIN00022     1111111  0065              51636002250}51186003426}DUB KIR EI F50T    AER LINGUS                                                                                                                                 1999011111111111111111111111111111111 31
4410KIR  141014104410EIDW 150501505F50 AEIN00023     1111111  0055              51186003426}51636002250}KIR DUB EI F50T    AER LINGUS                                                                                                                                 1999011111111111111111111111111111111 31
4410EIDW 220022004410KIR  230502305F50 AEIN00026     1111110  0065              51636002250}51186003426}DUB KIR EI F50T    AER LINGUS                                                                                                                                 1999011011111101111110111111011111101 26

4410EINN8130512054410EIDW 135501255A330AEIN00125     1111111    50 9011231   37551372003210}51636002250}SNN3DUB EIA330JDUBLIN: REPUBLIC OF IRELANDAER LINGUS                 UNK  121SHANNON: REPUBLIC IRELAND  REPUBLIC OF IRELAND        REPUBLIC OF IRELAND        1999091111111111111111111111111111110 30
 130BOS 8201500154410EINN 071040610A330AEIN00132     0011010   355 713 929   37547652025560}51372003210}BOS3SNN EIA330JSHANNON: REPUBLIC IRELAND  AER LINGUS                 UNK 2883BOSTON: MASS.              REPUBLIC OF IRELAND        MASSACHESETTS              1999091010001101000110100011010001100 13
4410EINN8075506554410EIDW 084500745A330AEIN00132     0001101    50 7141231   37551372003210}51636002250}SNN3DUB EIA330JDUBLIN: REPUBLIC OF IRELANDAER LINGUS                 UNK  121SHANNON: REPUBLIC IRELAND  REPUBLIC OF IRELAND        REPUBLIC OF IRELAND        1999091101000110100011010001101000110 14


Following is an example of the Out for One:

00000001|1999|02|                           |0605|0605|0700|0700|KIR ||F50 |E|IN0|   | |0055|    AER LINGUS             |00021|EI|DUB||516360||F50|                           |                          
00000002|1999|02|                           |1240|1240|1345|1345|EIDW||F50 |E|IN0|   | |0065|    AER LINGUS             |00022|EI|KIR||511860||F50|                           |                          
00000003|1999|02|                           |1410|1410|1505|1505|KIR ||F50 |E|IN0|   | |0055|    AER LINGUS             |00023|EI|DUB||516360||F50|                           |                          
00000004|1999|02|                           |2200|2200|2305|2305|EIDW||F50 |E|IN0|   | |0065|    AER LINGUS             |00026|EI|KIR||511860||F50|                           |                          


Example of Output for Two:

199900000001|199902                           _0605|199902                           _0605|199902                           _0700|199902                           _0700|KIR ||F50 |E|IN0|   | |0055|    AER LINGUS             |00021|EI|DUB||516360||F50|                           |                          
199900000002|199902                           _1240|199902                           _1240|199902                           _1345|199902                           _1345|EIDW||F50 |E|IN0|   | |0065|    AER LINGUS             |00022|EI|KIR||511860||F50|                           |                          
199900000003|199902                           _1410|199902                           _1410|199902                           _1505|199902                           _1505|KIR ||F50 |E|IN0|   | |0055|    AER LINGUS             |00023|EI|DUB||516360||F50|                           |                          
199900000004|199902                           _2200|199902                           _2200|199902                           _2305|199902                           _2305|EIDW||F50 |E|IN0|   | |0065|    AER LINGUS             |00026|EI|KIR||511860||F50|                           |                          
199900000005|199902                           _0725|199902                           _0725|199902                           _0820|199902                           _0820|EIDW||F50 |E|IN0|   | |0055|    AER LINGUS             |00032|EI|ORK||510600||F50|                           |                          
199900000006|199902                           _0845|199902                           _0845|199902                           _0940|199902                           _0940|EICK||F50 |E|IN0|   | |0055|    AER LINGUS             |00033|EI|DUB||516360||F50|                           |                          


Doing the unpacking for strings array starting at zero and
moving on.


Is there a problem with the unpack method?

Any help very appreciated

Thanks
0
Comment
Question by:tomatocans
  • 14
  • 5
19 Comments
 
LVL 85

Expert Comment

by:ozo
ID: 2784109
What is strange about the output?
0
 

Author Comment

by:tomatocans
ID: 2784291
the fields are not matching up
is there a problem with the upack
method
0
 

Author Comment

by:tomatocans
ID: 2784295
plus the day is not being out in step one
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 

Author Comment

by:tomatocans
ID: 2784436
Ozo I changed the code like so to simplify to one
output
getting compiling errors I am sure simple to you can u please help with anlaysis:

#! /usr/local/bin/perl -w

open(IN, "< /home/tmclaugh/oag/bin/ein99");
open(OUT, "> /home/tmclaugh/oag/bin/flight.dbload");

$UID='0000000';

while ($Line = <IN>)
                    {
                    # Add a leading character so that awk's 1-based
                    # second substr parameter will work
                    $Line =  " " . $Line;
                            $departure_country_code = substr($Line,1,4);  
                            $departure_airport_id= substr($Line,5,4);
                            $departure_local_time = substr($Line,10,4);
                            $departure_gmt_time = substr($Line,14,4);
                            $arrival_country_code = substr($Line,18,4);
                            $arrival_airport_code = substr($Line,22,4);
                            $arrival_local_time= substr($Line,27,4);
                            $arrival_gmt_time = substr($Line,32,4);  
                            $aircraft_type= substr($Line,36,4);
                            $air_carrier_id= substr($Line,41,3);
                            $flight_number= substr($Line,44,5);
                            $operator_type = substr($Line,62,1);
                            $elapsed_time = substr($Line,63,4);
                            $ata_carrier_code = substr($Line,75,3);
                            $seats = substr($Line,78,3);
                            $departure_latitude= substr($Line,81,6);
                            $departure_longitude= substr($Line,87,6);
                            $arrival_latitude= substr($Line,93,6);
                            $arrival_longitude = substr($Line,99,6);
                            $ata_departure_airport_id = substr($Line,105,3);
                            $ata_airrival_airport_code = substr($Line,109,3);
                            $carrier_code= substr($Line,113,2);
                            $carrier_type = substr($Line,115,1);
                            $ata_aircraft_type= substr($Line,116,3);
                            $equipment_type = substr($Line,119,1);
                  $arrival_city=substr($Line,120,27);
                  $air_carrier_full_name=substr($Line,147,27);
                  $center=substr($Line,174,3);
                  $distance=($Line,177,5);
                  $departure_city=($Line,182,27);
                  $arrival_country=($Line,209,27);
                  $departure_country=($Line,236,27);
                  $year=($Line,263,4);
                  $month=($Line,267,2);
                  $days=($Line,269,31);
                  if ($departure_longitude=~ /[0-9]{5}[KROM\{]/) {
                                             $departure_longitude = "+" . substr($departure_longitude,0,5);
                            }
                            elsif ($departure_longitude =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                                             $departure_longitude = "-" . substr($departure_longitude,0,5);
                            }
                           else {
                   
                            }
                            if ($arrival_longitude =~ /[0-9]{5}[KROM\{]/) {
                                                $arrival_longitude = "+" . $arrival_longitude,0,5);
                             }
                             elsif ($arrival_longitude=~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                                                $arrival_longitude = "-" . substr($arrival_longitude,0,5);
                              }
                              else {

                              }
                    @day=(0,split//,$days);
            
                   for(grep $day[$_],1..31){
                  $days=substr"0$_",-2;
                  ++$UID;
                                        print OUT "$month$UID|$month$day$year_$departure_local_time|$month$day$year_$departure_gmt_time|$month$day$year_$arrival_local_time|$month$day$year_$arrival_gmt_time|$departure_airport_id|$arrival_airport_id|$aircraft_type|$air_carrier_id|$flight_number|$distance|$elapsed_time|$ata_carrier_id|$air_carrier_full_name|$operator_type|$carrier_type|$carrier_code|$departure_latitude|$departure_longitude|$arrival_latitude|$arrival_longitude|$ata_airport_id|$$departure_country_code|$arrival_country_code|$depature_city|$arrrival_city|$seats|$ata_aircraft_type|$equipment_type|$departure_country|$arrival_country"

      }
}

close IN;
close OUT;
0
 

Author Comment

by:tomatocans
ID: 2784779
Ozo

I formatted the input file more uniformally with a small awk script so the issue now is that I am not receiving output in this scenario:

Example of input:
01|1101111110111111011111101111110|1999|0605|0605|0700|0700|KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
01|1111111111111111111111111111111|1999|1240|1240|1345|1345|EIDW|KIR |F50 |00022|     |0065|   |                           | | |EI|516360|02250}|511860|03426}|DUB||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
01|1111111111111111111111111111111|1999|1410|1410|1505|1505|KIR |EIDW|F50 |00023|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
05|1000000100000010000000000000000|1999|1730|1630|1905|1805|EGBB|EICK|BA46|00767|  288|  95|   |AER LINGUS                 | |A|EI|512820|00630}|510600|03054}|BHX||4930|4410|BIRMINGHAM: ENGLAND (UK)   |CORK: REPUBLIC OF IRELAND  | 75|146|J|UNITED KINGDOM             |REPUBLIC OF IRELAND        |EIN
05|0000000000000000000001000000100|1999|1730|1630|1845|1745|EGBB|EICK|BA46|00767|  288|  75|   |AER LINGUS                 | |A|EI|512820|00630}|510600|03054}|BHX||4930|4410|BIRMINGHAM: ENGLAND (UK)   |CORK: REPUBLIC OF IRELAND  | 75|146|J|UNITED KINGDOM             |REPUBLIC OF IRELAND        |EIN
05|0100000010000001000000000000000|1999|1845|1745|2010|1910|EICK|EGBB|F50 |00768|  288|  85|   |AER LINGUS                 | |C|EI|510600|03054}|512820|00630}|ORK||4410|4930|CORK: REPUBLIC OF IRELAND  |BIRMINGHAM: ENGLAND (UK)   | 50|F50|T|REPUBLIC OF IRELAND        |UNITED KINGDOM             |EIN

Code

#usr/local/bin/perl -w

open INPUT,"</home/tmclaugh/oag/bin/ein99_prep" or die "can't open ein99_prep $!";
open OUTPUT,">/home/tmclaugh/oag/bin/flight.dbload" or die "can't open flight.dbload $!";

$UID='000000';
while($line=<INPUT> ){
            
                @field=(split(/\|/,$line));
                $month=$field[0];
                $days=$field[1];
                $year=$field[2];
                $departure_local_time=$field[3];
                $departure_gmt_time=$field[4];
                $arrival_local_time=$field[5];
                    $departure_gmt_time=$field[6];
                    $arrival_airport_id=$field[7];
                    $aircraft_type=$field[8];
                    $flight_number=$field[9];
                    $distance=$field[10];
                    $elapsed_time=$field[11];
                    $ata_carrier_id=$field[12];
                    $air_carrier_full_name=$field[13];
                    $operator_type=$field[14];
                    $carrier_type=$field[15];
                    $carrier_code=$field[16];
                    $departure_latitude=$field[17];
                    $departure_longitude=$field[18];
                    $arrival_latitude=$field[19];
                    $arrival_longitude=$field[20];
                    $ata_departure_airport_id=$field[21];
                    $ata_arrival_airport_id=$field[22];
                    $departure_country_code=$field[23];
                    $arrival_country_code=$field[24];
                    $departure_city=$field[25];
                    $arrival_city=$field[26];
                    $seats=$field[27];
                    $ata_aircraft_type=$field[28];
                    $equipment_type=$field[29];
                $departure_country=$field[30];
                    $arrival_country=$field[31];
                    $air_carrier_id=$field[32];
                    if ($departure_longitude=~ /[0-9]{5}[KROM\{]/) {
                            $departure_longitude = "+" . substr($departure_longitude,0,5);
                    }
                    elsif ($departure_longitude =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $departure_longitude = "-" . substr($departure_longitude,0,5);
                    }
                    else {
                    }
                    if ($arrival_longitude =~ /[0-9]{5}[KROM\{]/) {
                            $arrival_longitude = "+" . substr($arrival_longitude,0,5);
                    }
                    elsif ($arrival_longitude=~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $arrival_longitude = "-" . substr($arrival_longitude,0,5);
                    }
                    else {

                    }

                  @day=(0,split//,$days);
                  for(grep $day[$_],1..31){
                  $days=substr"0$_",-2;
                  ++$UID;
                                        print OUT "$month$UID|$month$day$year_$departure_local_time|$month$day$year_$departure_gmt_time|$month$day$year_$arrival_local_time|$month$day$year_$arrival_gmt_time|$departure_airport_id|$arrival_airport_id|$aircraft_type|$flight_number|$distance|$elapsed_time|$ata_carrier_id|$air_carrier_full_name|$operator_type|$carrier_type|$carrier_code|$departure_latitude|$departure_longitude|$arrival_latitude|$arrival_longitude|$ata_departure_airport_id|$ata_arrival_airport_id|$departure_country_code|$arrival_country_code|$departure_city|$arrival_city|$seats|$ata_aircraft_type|$equipment_type|$departure_country|$arrival_country|$air_carrier_id"

      }
}


I am not getting any output to
the OUT file.


Any suggestions appreciated
0
 

Author Comment

by:tomatocans
ID: 2784781
There is a ; after the print OUT statement
0
 
LVL 85

Accepted Solution

by:
ozo earned 800 total points
ID: 2784932
Filehandle main::OUT never opened at - line 65, <INPUT> chunk 1 (#3)
   
    (W) An I/O operation was attempted on a filehandle that was never initialized.
    You need to do an open() or a socket() call, or call a constructor from
    the FileHandle package.

Did you mean OUTPUT?
0
 

Author Comment

by:tomatocans
ID: 2785512

Sorry
Yes  OUTPUT
0
 

Author Comment

by:tomatocans
ID: 2785527
I apologize for the bonehead error. Yeas I am now getting output but the loop for day is not working nor is adjustment for departure and arrival longitudes.

This is a dire emergency if u could please apply your expertise I would be eternally greatful.

Tom
0
 

Author Comment

by:tomatocans
ID: 2785540
Example of input:
01|1101111110111111011111101111110|1999|0605|0605|0700|0700|KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
01|1111111111111111111111111111111|1999|1240|1240|1345|1345|EIDW|KIR |F50 |00022|     |0065|   |                           | | |EI|516360|02250}|511860|03426}|DUB||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
01|1111111111111111111111111111111|1999|1410|1410|1505|1505|KIR |EIDW|F50 |00023|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
05|1000000100000010000000000000000|1999|1730|1630|1905|1805|EGBB|EICK|BA46|00767|  288|  95|   |AER LINGUS                 | |A|EI|512820|00630}|510600|03054}|BHX||4930|4410|BIRMINGHAM: ENGLAND (UK)   |CORK: REPUBLIC OF IRELAND  | 75|146|J|UNITED KINGDOM             |REPUBLIC OF IRELAND        |EIN
05|0000000000000000000001000000100|1999|1730|1630|1845|1745|EGBB|EICK|BA46|00767|  288|  75|   |AER LINGUS                 | |A|EI|512820|00630}|510600|03054}|BHX||4930|4410|BIRMINGHAM: ENGLAND (UK)   |CORK: REPUBLIC OF IRELAND  | 75|146|J|UNITED KINGDOM             |REPUBLIC OF IRELAND        |EIN
05|0100000010000001000000000000000|1999|1845|1745|2010|1910|EICK|EGBB|F50 |00768|  288|  85|   |AER LINGUS                 | |C|EI|510600|03054}|512820|00630}|ORK||4410|4930|CORK: REPUBLIC OF IRELAND  |BIRMINGHAM: ENGLAND (UK)   | 50|F50|T|REPUBLIC OF IRELAND        |UNITED KINGDOM             |EIN

Code

#usr/local/bin/perl -w

open INPUT,"</home/tmclaugh/oag/bin/ein99_prep" or die "can't open ein99_prep $!";
open OUTPUT,">/home/tmclaugh/oag/bin/flight.dbload" or die "can't open flight.dbload $!";

$UID='000000';
while($line=<INPUT> ){
            
                @field=(split(/\|/,$line));
                $month=$field[0];
                $days=$field[1];
                $year=$field[2];
                $departure_local_time=$field[3];
                $departure_gmt_time=$field[4];
                $arrival_local_time=$field[5];
                    $departure_gmt_time=$field[6];
                    $arrival_airport_id=$field[7];
                    $aircraft_type=$field[8];
                    $flight_number=$field[9];
                    $distance=$field[10];
                    $elapsed_time=$field[11];
                    $ata_carrier_id=$field[12];
                    $air_carrier_full_name=$field[13];
                    $operator_type=$field[14];
                    $carrier_type=$field[15];
                    $carrier_code=$field[16];
                    $departure_latitude=$field[17];
                    $departure_longitude=$field[18];
                    $arrival_latitude=$field[19];
                    $arrival_longitude=$field[20];
                    $ata_departure_airport_id=$field[21];
                    $ata_arrival_airport_id=$field[22];
                    $departure_country_code=$field[23];
                    $arrival_country_code=$field[24];
                    $departure_city=$field[25];
                    $arrival_city=$field[26];
                    $seats=$field[27];
                    $ata_aircraft_type=$field[28];
                    $equipment_type=$field[29];
                $departure_country=$field[30];
                    $arrival_country=$field[31];
                    $air_carrier_id=$field[32];
                    if ($departure_longitude=~ /[0-9]{5}[KROM\{]/) {
                            $departure_longitude = "+" . substr($departure_longitude,0,5);
                    }
                    elsif ($departure_longitude =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $departure_longitude = "-" . substr($departure_longitude,0,5);
                    }
                    else {
                    }
                    if ($arrival_longitude =~ /[0-9]{5}[KROM\{]/) {
                            $arrival_longitude = "+" . substr($arrival_longitude,0,5);
                    }
                    elsif ($arrival_longitude=~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $arrival_longitude = "-" . substr($arrival_longitude,0,5);
                    }
                    else {

                    }

                  @day=(0,split//,$days);
                  for(grep $day[$_],1..31){
                  $days=substr"0$_",-2;
                  ++$UID;
                                        print OUTPUT "$month$UID|$month$day$year_$departure_local_time|$month$day$year_$departure_gmt_time|$month$day$year_$arrival_local_time|$month$day$year_$arrival_gmt_time|$departure_airport_id|$arrival_airport_id|$aircraft_type|$flight_number|$distance|$elapsed_time|$ata_carrier_id|$air_carrier_full_name|$operator_type|$carrier_type|$carrier_code|$departure_latitude|$departure_longitude|$arrival_latitude|$arrival_longitude|$ata_departure_airport_id|$ata_arrival_airport_id|$departure_country_code|$arrival_country_code|$departure_city|$arrival_city|$seats|$ata_aircraft_type|$equipment_type|$departure_country|$arrival_country|$air_carrier_id"

      }
}


Following is the output I am receiving:

01000001|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000002|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000003|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000004|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000005|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000006|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000007|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000008|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000009|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                          
01000010|010605|010700|010700|01||KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |

The output is not adjusting the departure and arrival longitudes nor
are the day and year printing before th departure arrival times.

PLEASE HELP
Any suggestions appreciated
0
 

Author Comment

by:tomatocans
ID: 2785771
Ozo

                    The last problem is that the binary info for days is not
                    transferring to the day array and printing out.


                    Example of input:
                    01|1101111110111111011111101111110|1999|0605|0605|0700|0700|KIR |EIDW|F50 |00021|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
                    01|1111111111111111111111111111111|1999|1240|1240|1345|1345|EIDW|KIR |F50 |00022|     |0065|   |                           | | |EI|516360|02250}|511860|03426}|DUB||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
                    01|1111111111111111111111111111111|1999|1410|1410|1505|1505|KIR |EIDW|F50 |00023|     |0055|   |                           | | |EI|511860|03426}|516360|02250}|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN
                    05|1000000100000010000000000000000|1999|1730|1630|1905|1805|EGBB|EICK|BA46|00767|  288|  95|   |AER LINGUS                 | |A|EI|512820|00630}|510600|03054}|BHX||4930|4410|BIRMINGHAM: ENGLAND (UK)   |CORK: REPUBLIC OF IRELAND  | 75|146|J|UNITED KINGDOM             |REPUBLIC OF IRELAND        |EIN
                    05|0000000000000000000001000000100|1999|1730|1630|1845|1745|EGBB|EICK|BA46|00767|  288|  75|   |AER LINGUS                 | |A|EI|512820|00630}|510600|03054}|BHX||4930|4410|BIRMINGHAM: ENGLAND (UK)   |CORK: REPUBLIC OF IRELAND  | 75|146|J|UNITED KINGDOM             |REPUBLIC OF IRELAND        |EIN
                    05|0100000010000001000000000000000|1999|1845|1745|2010|1910|EICK|EGBB|F50 |00768|  288|  85|   |AER LINGUS                 | |C|EI|510600|03054}|512820|00630}|ORK||4410|4930|CORK: REPUBLIC OF IRELAND  |BIRMINGHAM: ENGLAND (UK)   | 50|F50|T|REPUBLIC OF IRELAND        |UNITED KINGDOM             |EIN

                    Code


                    #usr/local/bin/perl -w

                    open INPUT,"</home/tmclaugh/oag/bin/ein99_prep" or die "can't open ein99_prep $!";
                    open OUTPUT,">/home/tmclaugh/oag/bin/flight.dbload" or die "can't open flight.dbload $!";

                    $UID='000000';
                    while($line=<INPUT> ){

                        @fields=(split(/\|/,$line));
                        $month=$fields[0];
                        $days=$fields[1];
                        $year=$fields[2];
                        $departure_local_time=$fields[3];
                        $departure_gmt_time=$fields[4];
                        $arrival_local_time=$fields[5];
                                        $departure_gmt_time=$fields[6];
                                        $arrival_airport_id=$fields[7];
                                        $departure_airport_id=$fields[8];
                                        $aircraft_type=$fields[9];
                                        $flight_number=$fields[10];
                                        $distance=$fields[11];
                                        $elapsed_time=$fields[12];
                                        $ata_carrier_id=$fields[13];
                                        $air_carrier_full_name=$fields[14];
                                        $operator_type=$fields[15];
                                        $carrier_type=$fields[16];
                                        $carrier_code=$fields[17];
                                        $departure_latitude=$fields[18];
                                        $departure_longitude=$fields[19];
                                        $arrival_latitude=$fields[20];
                                        $arrival_longitude=$fields[21];
                                        $ata_departure_airport_id=$fields[22];
                                        $ata_arrival_airport_id=$fields[23];
                                        $departure_country_code=$fields[24];
                                        $arrival_country_code=$fields[25];
                                        $departure_city=$fields[26];
                                        $arrival_city=$fields[27];
                                        $seats=$fields[28];
                                        $ata_aircraft_type=$fields[29];
                                        $equipment_type=$fields[30];
                        $departure_country=$fields[31];
                                        $arrival_country=$fields[32];
                                        $air_carrier_id=$fields[33];
                                        if ($departure_longitude=~ /[0-9]{5}[KROM\{]/) {
                                                $departure_longitude = "+" . substr($departure_longitude,0,5);
                                        }
                                        elsif ($departure_longitude =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                                                $departure_longitude = "-" . substr($departure_longitude,0,5);
                                        }
                                        else {
                                        }
                                        if ($arrival_longitude =~ /[0-9]{5}[KROM\{]/) {
                                                $arrival_longitude = "+" . substr($arrival_longitude,0,5);
                                        }
                                        elsif ($arrival_longitude=~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                                                $arrival_longitude = "-" . substr($arrival_longitude,0,5);
                                        }
                                        else {

                                        }

                                @day=(0,split//,$days);
                                for(grep $day[$_],1..31){
                    $days=substr"0$_",-2;
                    ++$UID;


                                  print OUTPUT
                    "$month$UID|${month}${day}${year}_$departure_local_time|${month}${day}${year}_$departure_gmt_time|${month}${day}${year}_$arrival_local_time|${month}${day}${year}_$arrival_gmt_time|$departure_airport_id|$arrival_airport_id|$aircraft_type|$flight_number|$distance|$elapsed_time|$ata_carrier_id|$air_carrier_full_name|$operator_type|$carrier_type|$carrier_code|$departure_latitude|$departure_longitude|$arrival_latitude|$arrival_longitude|$ata_departure_airport_id|$ata_arrival_airport_id|$departure_country_code|$arrival_country_code|$departure_city|$arrival_city|$seats|$ata_aircraft_type|$equipment_type|$departure_country|$arrival_country|$air_carrier_id\n";


                    }
                    }





                    Following is the output I am receiving:

                    01000001|011999_0605|011999_0605|011999_0700|011999_0700|EIDW|KIR |F50 |00021|     |0055|   |                           | | |EI|511860|-03426|516360|-02250|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN

                    01000002|011999_0605|011999_0605|011999_0700|011999_0700|EIDW|KIR |F50 |00021|     |0055|   |                           | | |EI|511860|-03426|516360|-02250|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN

                    01000003|011999_0605|011999_0605|011999_0700|011999_0700|EIDW|KIR |F50 |00021|     |0055|   |                           | | |EI|511860|-03426|516360|-02250|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN

                    01000004|011999_0605|011999_0605|011999_0700|011999_0700|EIDW|KIR |F50 |00021|     |0055|   |                           | | |EI|511860|-03426|516360|-02250|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN

                    01000005|011999_0605|011999_0605|011999_0700|011999_0700|EIDW|KIR |F50 |00021|     |0055|   |                           | | |EI|511860|-03426|516360|-02250|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN

                    01000006|011999_0605|011999_0605|011999_0700|011999_0700|EIDW|KIR |F50 |00021|     |0055|   |                           | | |EI|511860|-03426|516360|-02250|KIR||4410|4410|                           |    AER LINGUS             |   |F50|T|                           |                           |EIN


                    Ozo

                    The last problem is that the binary info for days is not
                    transferring to the day array and printing out.

                    PLEASE HELP
                    Any suggestions appreciated
0
 

Author Comment

by:tomatocans
ID: 2786035
Thanks for your help OZO
0
 
LVL 85

Expert Comment

by:ozo
ID: 2786247
you set $days=substr"0$_",-2; but never use it.
did you mean to set $day? or to print "$days"?
0
 

Author Comment

by:tomatocans
ID: 2786264
OZO

This is how the program stands
If u think it is incorrect

PLEASE PLEASE PLEASE

Tell me


The output  looked correct

If it does not make sense PLEASE

if u have a heart tell me





                  @day=(0,split//,$days);
                  for(grep $day[$_],1..31){
                  $day=substr"0$_",-2;
                  ++$UID;

                  
                         print OUTPUT "$month$UID|${month}${day}${year}_$departure_local_time|${month}${day}${year}_$departure_gmt_time|${month}${day}${year}_$arrival_local_time|${month}${day}${year}_$arrival_gmt_time|$departure_airport_id|$arrival_airport_id|$aircraft_type|$flight_number|$distance|$elapsed_time|$ata_carrier_id|$air_carrier_full_name|$operator_type|$carrier_type|$carrier_code|$departure_latitude|$departure_longitude|$arrival_latitude|$arrival_longitude|$ata_departure_airport_id|$ata_arrival_airport_id|$departure_country_code|$arrival_country_code|$departure_city|$arrival_city|$seats|$ata_aircraft_type|$equipment_type|$departure_country|$arrival_country|$air_carrier_id\n";

      }
}
0
 
LVL 85

Expert Comment

by:ozo
ID: 2786286
when I run it, I get uninitialised $arrival_gmt_time and uninitialised $departure_airport_id
But I don't know whether the rest of the output is what you want.
0
 

Author Comment

by:tomatocans
ID: 2786361
Please try running this code:


#usr/local/bin/perl -w

open INPUT,"</home/tmclaugh/oag/bin/ein99_prep" or die "can't open ein99_prep $!";
open OUTPUT,">/home/tmclaugh/oag/bin/flight.dbload" or die "can't open flight.dbload $!";

$UID='000000';
while($line=<INPUT> ){
            
                @fields=(split(/\|/,$line));
                $month=$fields[0];
                $days=$fields[1];
                $year=$fields[2];
                $departure_local_time=$fields[3];
                $departure_gmt_time=$fields[4];
                $arrival_local_time=$fields[5];
                    $arrival_gmt_time=$fields[6];
                    $departure_airport_id=$fields[7];
                    $arrival_airport_id=$fields[8];
                    $aircraft_type=$fields[9];
                    $flight_number=$fields[10];
                    $distance=$fields[11];
                    $elapsed_time=$fields[12];
                    $ata_carrier_id=$fields[13];
                    $air_carrier_full_name=$fields[14];
                    $operator_type=$fields[15];
                    $carrier_type=$fields[16];
                    $carrier_code=$fields[17];
                    $departure_latitude=$fields[18];
                    $departure_longitude=$fields[19];
                    $arrival_latitude=$fields[20];
                    $arrival_longitude=$fields[21];
                    $ata_departure_airport_id=$fields[22];
                    $ata_arrival_airport_id=$fields[23];
                    $departure_country_code=$fields[24];
                    $arrival_country_code=$fields[25];
                    $departure_city=$fields[26];
                    $arrival_city=$fields[27];
                    $seats=$fields[28];
                    $ata_aircraft_type=$fields[29];
                    $equipment_type=$fields[30];
                $departure_country=$fields[31];
                    $arrival_country=$fields[32];
                    $air_carrier_id=$fields[33];
                    if ($departure_longitude=~ /[0-9]{5}[KROM\{]/) {
                            $departure_longitude = "+" . substr($departure_longitude,0,5);
                    }
                    elsif ($departure_longitude =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $departure_longitude = "-" . substr($departure_longitude,0,5);
                    }
                    else {
                    }
                    if ($arrival_longitude =~ /[0-9]{5}[KROM\{]/) {
                            $arrival_longitude = "+" . substr($arrival_longitude,0,5);
                    }
                    elsif ($arrival_longitude=~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $arrival_longitude = "-" . substr($arrival_longitude,0,5);
                    }
                    else {

                    }

                  @day=(0,split//,$days);
                  for(grep $day[$_],1..31){
                  $day=substr"0$_",-2;
                  ++$UID;

                  
                         print OUTPUT "$month$UID|${month}${day}${year}_$departure_local_time|${month}${day}${year}_$departure_gmt_time|${month}${day}${year}_$arrival_local_time|${month}${day}${year}_$arrival_gmt_time|$departure_airport_id|$arrival_airport_id|$aircraft_type|$flight_number|$distance|$elapsed_time|$ata_carrier_id|$air_carrier_full_name|$operator_type|$carrier_type|$carrier_code|$departure_latitude|$departure_longitude|$arrival_latitude|$arrival_longitude|$ata_departure_airport_id|$ata_arrival_airport_id|$departure_country_code|$arrival_country_code|$departure_city|$arrival_city|$seats|$ata_aircraft_type|$equipment_type|$departure_country|$arrival_country|$air_carrier_id\n";

      }
}


0
 

Author Comment

by:tomatocans
ID: 2786363
As I lamely try to get better at perl can u reccomend an IDE to
use
0
 

Author Comment

by:tomatocans
ID: 2786382
One other question:

This output puts spaces in in fields that are null
values.

How do I change them from space filled fields
|      | with varying lenghts
to || null values.


Thanks

Sorry

0
 
LVL 85

Expert Comment

by:ozo
ID: 2787316
perl -wMdiagnostics
and
perl -d
can be helpful in debugging
If you want to ignore trailing spaced in the fields, you might use
@field=split/\s*\|/,$line;
Or you can remove them with
for( @field ){ s/\s*$// }
0

Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many time we need to work with multiple files all together. If its windows system then we can use some GUI based editor to accomplish our task. But what if you are on putty or have only CLI(Command Line Interface) as an option to  edit your files. I…
In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question