Solved

Unpacking Problem Causing Strange Output

Posted on 2000-05-05
19
183 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 84

Expert Comment

by:ozo
Comment Utility
What is strange about the output?
0
 

Author Comment

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

Author Comment

by:tomatocans
Comment Utility
plus the day is not being out in step one
0
 

Author Comment

by:tomatocans
Comment Utility
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
Comment Utility
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
Comment Utility
There is a ; after the print OUT statement
0
 
LVL 84

Accepted Solution

by:
ozo earned 200 total points
Comment Utility
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
Comment Utility

Sorry
Yes  OUTPUT
0
 

Author Comment

by:tomatocans
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:tomatocans
Comment Utility
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
Comment Utility
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
Comment Utility
Thanks for your help OZO
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
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
Comment Utility
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 84

Expert Comment

by:ozo
Comment Utility
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
Comment Utility
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
Comment Utility
As I lamely try to get better at perl can u reccomend an IDE to
use
0
 

Author Comment

by:tomatocans
Comment Utility
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 84

Expert Comment

by:ozo
Comment Utility
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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

I have been pestered over the years to produce and distribute regular data extracts, and often the request have explicitly requested the data be emailed as an Excel attachement; specifically Excel, as it appears: CSV files confuse (no Red or Green h…
Checking the Alert Log in AWS RDS Oracle can be a pain through their user interface.  I made a script to download the Alert Log, look for errors, and email me the trace files.  In this article I'll describe what I did and share my script.
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…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

762 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now