[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Perl Code to generate delimited files from NASD data.
I have a piece of perl code to process the NASD files.
It runs off a table of data bases on the description files.
The only file defined so far is the airport file file.
I would hope the way individual file formats are defined is
clear without any further explanation.
I intend to build one of these for each file or maybe
one big one for all the files unless that gets too big and
convoluted.
It generates Vertical bar delimited files.
There are no vertical bar chars in any of the original data,
unlike commas.
The vertical bar is another common convention for delimiting files.
If someone wants something else, it is a simple one line change
and is left as an excersise for the user.
The program generates 3 output files for the three different
kinds of records contained in the apt file.
Nothing has been removed aside from blanks and filler fields.
Here are the results:
These are record type counts.
Airports 19615
Runway 23460
Remarks 64587
System Time to run program on a 350 Mhz AMD K6.
184.27 user
2.22 system
3:24.04 elapsed
91% CPU
File outputs.
9006 -rw-r--r-- 1 root root 9184999 Feb 4 10:40 apt.apt.delimited
4675 -rw-r--r-- 1 root root 4766349 Feb 4 10:40 apt.rmk.delimited
3859 -rw-r--r-- 1 root root 3934793 Feb 4 10:40 apt.rwy.delimited
# gzip *.delimited
2158 -rw-r--r-- 1 root root 2198942 Feb 4 10:40 apt.apt.delimited.gz
1273 -rw-r--r-- 1 root root 1296794 Feb 4 10:40 apt.rmk.delimited.gz
766 -rw-r--r-- 1 root root 779955 Feb 4 10:40 apt.rwy.delimited.gz
Here is the Perl code.
#!/usr/bin/perl -w
#=========================================================================#
# Program Name: convert_apt.pl #
# Purpose: Read NASD fixed length data and convert to delimited format #
# and split into different files based on record type #
# #
# Filenames and paths: #
#=========================================================================#
#eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift;
# process any FOO=bar switches
#============#
# Open files #
#============#
use English;
#---input file---#
open("input_file", "../NASD-1999-12-31/apt.txt") ||
die 'Cannot open file "../NASD-1999-12-31/apt.txt - Cause: $! ".';
#---output file---#
open( apt_file , ">./apt.apt.delimited") ||
die 'Cannot create file ">./apt.apt.delimited - Cause: $! ".';
#---output file---#
open( rwy_file , ">./apt.rwy.delimited") ||
die 'Cannot create file ">./apt.rwy.delimited - Cause: $! ".';
#---output file---#
open( rmk_file , ">./apt.rmk.delimited") ||
die 'Cannot create file ">./apt.rmk.delimited - Cause: $! ".';
#======================#
# Variable Definitions #
#======================#
# A -> Justification Left/Right
# B -> Type Alphanumeric or Numeric
# C -> Data Length
# D -> Data Start position
# E -> Provided Field ID, not of any use IMHO.
# F -> Action this program will take with field. Case statement open to additional features
# G -> Longer description of field. pulled from the first line only and not modified aside
# from adding the escape \' for any embedded single quotes.
# A B C D E F G
$apt_fields=[
['L', 'AN', '0003', '00001', 'N/A ', 'WRITE', 'RECORD TYPE INDICATOR. = APT'],
['L', 'AN', '0011', '00004', 'DLID ', 'WRITE', 'LANDING FACILITY SITE NUMBER'],
['L', 'AN', '0013', '00015', 'DLID ', 'WRITE', 'LANDING FACILITY TYPE'],
['L', 'AN', '0004', '00028', 'E7 ', 'WRITE', 'LOCATION IDENTIFIER'],
['L', 'AN', '0010', '00032', 'N/A ', 'WRITE', 'INFORMATION EFFECTIVE DATE (MM/DD/YYYY)'],
['L', 'AN', '0003', '00042', 'A6 ', 'WRITE', 'FAA REGION CODE'],
['L', 'AN', '0004', '00045', 'A6A ', 'WRITE', 'FAA DISTRICT OR FIELD OFFICE CODE'],
['L', 'AN', '0002', '00049', 'A4 ', 'WRITE', 'ASSOCIATED STATE POST OFFICE CODE'],
['L', 'AN', '0020', '00051', 'A4 ', 'WRITE', 'ASSOCIATED STATE NAME'],
['L', 'AN', '0021', '00071', 'A5 ', 'WRITE', 'ASSOCIATED COUNTY (OR PARISH) NAME'],
['L', 'AN', '0002', '00092', 'A5 ', 'WRITE', 'ASSOCIATED COUNTY\'S STATE (POST OFFICE CODE)'],
['L', 'AN', '0026', '00094', 'A1 ', 'WRITE', 'ASSOCIATED CITY NAME'],
['L', 'AN', '0042', '00120', 'A2 ', 'WRITE', 'OFFICIAL FACILITY NAME'],
['L', 'AN', '0002', '00162', 'A10 ', 'WRITE', 'AIRPORT OWNERSHIP TYPE'],
['L', 'AN', '0002', '00164', 'A18 ', 'WRITE', 'FACILITY USE'],
['L', 'AN', '0029', '00166', 'A11 ', 'WRITE', 'FACILITY OWNER\'S NAME'],
['L', 'AN', '0029', '00195', 'A12 ', 'WRITE', 'OWNER\'S ADDRESS'],
['L', 'AN', '0029', '00224', 'A12A ', 'WRITE', 'OWNER\'S CITY, STATE AND ZIP CODE'],
['R', 'AN', '0012', '00253', 'A13 ', 'WRITE', 'OWNER\'S PHONE NUMBER'],
['L', 'AN', '0029', '00265', 'A14 ', 'WRITE', 'FACILITY MANAGER\'S NAME'],
['L', 'AN', '0029', '00294', 'A15 ', 'WRITE', 'MANAGER\'S ADDRESS'],
['L', 'AN', '0029', '00323', 'A15A ', 'WRITE', 'MANAGER\'S CITY, STATE AND ZIP CODE'],
['R', 'AN', '0012', '00352', 'A16 ', 'WRITE', 'MANAGER\'S PHONE NUMBER'],
['L', 'AN', '0014', '00364', 'A19 ', 'WRITE', 'AIRPORT REFERENCE POINT LATITUDE (FORMATTED)'],
['L', 'AN', '0011', '00378', 'A19S ', 'WRITE', 'AIRPORT REFERENCE POINT LATITUDE (SECONDS)'],
['L', 'AN', '0014', '00389', 'A20 ', 'WRITE', 'AIRPORT REFERENCE POINT LONGITUDE (FORMATTED)'],
['L', 'AN', '0011', '00403', 'A20S ', 'WRITE', 'AIRPORT REFERENCE POINT LONGITUDE (SECONDS)'],
['L', 'AN', '0001', '00414', 'A19A ', 'WRITE', 'AIRPORT REFERENCE POINT DETERMINATION METHOD'],
['R', 'AN', '0005', '00415', 'A21 ', 'WRITE', 'AIRPORT ELEVATION (NEAREST FOOT MSL)'],
['L', 'AN', '0001', '00420', 'A21 ', 'WRITE', 'AIRPORT ELEVATION DETERMINATION METHOD'],
['L', 'AN', '0003', '00421', 'E28 ', 'WRITE', 'MAGNETIC VARIATION AND DIRECTION'],
['L', 'AN', '0004', '00424', 'E28 ', 'WRITE', 'MAGNETIC VARIATION EPOCH YEAR'],
['R', 'AN', '0004', '00428', 'E147 ', 'WRITE', 'TRAFFIC PATTERN ALTITUDE (WHOLE FEET AGL)'],
['L', 'AN', '0016', '00432', 'A7 ', 'WRITE', 'AERONAUTICAL SECTIONAL CHART ON WHICH FACILITY'],
['L', 'AN', '0002', '00448', 'A3 ', 'WRITE', 'DISTANCE FROM CENTRAL BUSINESS DISTRICT OF CITY'],
['L', 'AN', '0003', '00450', 'A3 ', 'WRITE', 'DIRECTION OF AIRPORT FROM CENTRAL BUSINESS'],
['L', 'AN', '0003', '00453', 'E146A ', 'WRITE', 'BOUNDARY ARTCC IDENTIFIER'],
['L', 'AN', '0003', '00456', 'E146B ', 'WRITE', 'BOUNDARY ARTCC (FAA) COMPUTER IDENTIFIER'],
['L', 'AN', '0020', '00459', 'E146C ', 'WRITE', 'BOUNDARY ARTCC NAME'],
['L', 'AN', '0003', '00479', 'E156A ', 'WRITE', 'RESPONSIBLE ARTCC IDENTIFIER'],
['L', 'AN', '0003', '00482', 'E156B ', 'WRITE', 'RESPONSIBLE ARTCC (FAA) COMPUTER IDENTIFIER'],
['L', 'AN', '0020', '00485', 'E156C ', 'WRITE', 'RESPONSIBLE ARTCC NAME'],
['L', 'AN', '0001', '00505', 'A87 ', 'WRITE', 'TIE-IN FSS PHYSICALLY LOCATED ON FACILITY'],
['L', 'AN', '0004', '00506', 'A86 ', 'WRITE', 'TIE-IN FLIGHT SERVICE STATION (FSS) IDENTIFIER'],
['L', 'AN', '0026', '00510', 'A86 ', 'WRITE', 'TIE-IN FSS NAME'],
['L', 'AN', '0016', '00536', 'A89 ', 'WRITE', 'TOLL FREE PHONE NUMBER FROM AIRPORT TO FSS'],
['L', 'AN', '0004', '00552', 'A86A ', 'WRITE', 'ALTERNATE FSS IDENTIFIER'],
['L', 'AN', '0026', '00556', 'A86A ', 'WRITE', 'ALTERNATE FSS NAME'],
['L', 'AN', '0016', '00582', 'E3A ', 'WRITE', 'TOLL FREE PHONE NUMBER FROM AIRPORT TO'],
['L', 'AN', '0004', '00598', 'E2B ', 'WRITE', 'IDENTIFIER OF THE FACILITY RESPONSIBLE FOR'],
['L', 'AN', '0001', '00602', 'E139 ', 'WRITE', 'AVAILABILITY OF NOTAM \'D\' SERVICE AT AIRPORT'],
['L', 'AN', '0007', '00603', 'E157 ', 'WRITE', 'AIRPORT ACTIVATION DATE (MM/YYYY)'],
['L', 'AN', '0010', '00610', 'A26 ', 'WRITE', 'AIRPORT CERTIFICATION TYPE AND DATE'],
['L', 'AN', '0007', '00620', 'A25 ', 'WRITE', 'NASP/FEDERAL AGREEMENT CODE'],
['L', 'AN', '0013', '00627', 'E111 ', 'WRITE', 'AIRPORT AIRSPACE ANALYSIS DETERMINATION'],
['L', 'AN', '0001', '00640', 'E79 ', 'WRITE', 'FACILITY HAS BEEN DESIGNATED BY THE U.S. TREASURY'],
['L', 'AN', '0001', '00641', 'E80 ', 'WRITE', 'FACILITY HAS BEEN DESIGNATED BY THE U.S. TREASURY'],
['L', 'AN', '0001', '00642', 'E115 ', 'WRITE', 'FACILITY HAS MILITARY/CIVIL JOINT USE AGREEMENT'],
['L', 'AN', '0001', '00643', 'E116 ', 'WRITE', 'AIRPORT HAS ENTERED INTO AN AGREEMENT THAT'],
['L', 'AN', '0018', '00644', 'E141A ', 'WRITE', 'STATUS OF AIRPORT THAT IS AVAILABLE FOR USE'],
['L', 'AN', '0006', '00662', 'E141B ', 'WRITE', 'MILITARY DEPARTMENT(S) THAT MAINTAIN NATIONAL'],
['L', 'AN', '0002', '00668', 'E155 ', 'WRITE', 'AIRPORT INSPECTION METHOD'],
['L', 'AN', '0001', '00670', 'A111 ', 'WRITE', 'AGENCY/GROUP PERFORMING PHYSICAL INSPECTION'],
['L', 'AN', '0008', '00671', 'A112 ', 'WRITE', 'LAST PHYSICAL INSPECTION DATE (MMDDYYYY)'],
['L', 'AN', '0008', '00679', 'A113 ', 'WRITE', 'LAST DATE INFORMATION REQUEST WAS COMPLETED'],
['L', 'AN', '0040', '00687', 'A70 ', 'WRITE', 'FUEL TYPES AVAILABLE FOR PUBLIC USE AT THE'],
['L', 'AN', '0005', '00727', 'A71 ', 'WRITE', 'AIRFRAME REPAIR SERVICE AVAILABILITY/TYPE'],
['L', 'AN', '0005', '00732', 'A72 ', 'WRITE', 'POWER PLANT (ENGINE) REPAIR AVAILABILITY/TYPE'],
['L', 'AN', '0008', '00737', 'A73 ', 'WRITE', 'TYPE OF BOTTLED OXYGEN AVAILABLE (VALUE REPRESENTS'],
['L', 'AN', '0008', '00745', 'A74 ', 'WRITE', 'TYPE OF BULK OXYGEN AVAILABLE (VALUE REPRESENTS'],
['L', 'AN', '0077', '00753', 'A17 ', 'WRITE', 'AIRPORT ATTENDANCE SCHEDULE (WHEN MINIMUM'],
['L', 'AN', '0009', '00830', 'A81 ', 'WRITE', 'AIRPORT LIGHTING SCHEDULE'],
['L', 'AN', '0001', '00839', 'A85 ', 'WRITE', 'AIR TRAFFIC CONTROL TOWER LOCATED ON AIRPORT'],
['L', 'AN', '0042', '00840', 'A82 ', 'WRITE', 'UNICOM FREQUENCIES AVAILABLE AT THE AIRPORT'],
['L', 'AN', '0007', '00882', 'E100 ', 'WRITE', 'COMMON TRAFFIC ADVISORY FREQUENCY (CTAF)'],
['L', 'AN', '0004', '00889', 'A84 ', 'WRITE', 'SEGMENTED CIRCLE AIRPORT MARKER SYSTEM ON THE AIRPORT'],
['L', 'AN', '0003', '00893', 'A80 ', 'WRITE', 'LENS COLOR OF OPERABLE BEACON LOCATED ON THE AIRPORT'],
['L', 'AN', '0001', '00896', 'A24 ', 'WRITE', 'LANDING FEE CHARGED TO NON-COMMERCIAL USERS OF '],
['R', ' N', '0003', '00897', 'A90 ', 'WRITE', 'SINGLE ENGINE GENERAL AVIATION AIRCRAFT'],
['R', ' N', '0003', '00900', 'A91 ', 'WRITE', 'MULTI ENGINE GENERAL AVIATION AIRCRAFT'],
['R', ' N', '0003', '00903', 'A92 ', 'WRITE', 'JET ENGINE GENERAL AVIATION AIRCRAFT'],
['R', ' N', '0003', '00906', 'A93 ', 'WRITE', 'GENERAL AVIATION HELICOPTER'],
['R', ' N', '0003', '00909', 'A94 ', 'WRITE', 'OPERATIONAL GLIDERS'],
['R', ' N', '0003', '00912', 'A95 ', 'WRITE', 'OPERATIONAL MILITARY AIRCRAFT (INCLUDING HELICOPTERS) '],
['L', ' N', '0003', '00915', 'A96 ', 'WRITE', 'ULTRALIGHT AIRCRAFT'],
['R', ' N', '0006', '00918', 'A100 ', 'WRITE', 'COMMERCIAL SERVICES'],
['R', ' N', '0006', '00924', 'A102 ', 'WRITE', 'AIR TAXI'],
['R', ' N', '0006', '00930', 'A103 ', 'WRITE', 'GENERAL AVIATION LOCAL OPERATIONS'],
['R', ' N', '0006', '00936', 'A104 ', 'WRITE', 'GENERAL AVIATION ITINERANT OPERATIONS'],
['R', ' N', '0006', '00942', 'A105 ', 'WRITE', 'MILITARY AIRCRAFT OPERATIONS'],
['END-OF-LIST', '', '0', '0', '', '', 'End of list marker for internal program use ']
];
$rwy_fields=[
['L', 'AN', ' 3', '00001', 'N/A ', 'WRITE', 'RECORD TYPE INDICATOR.'],
['L', 'AN', '0011', '00004', 'DLID ', 'WRITE', 'LANDING FACILITY SITE NUMBER'],
['L', 'AN', '0002', '00015', 'DLID ', 'WRITE', 'RUNWAY STATE POST OFFICE CODE'],
['L', 'AN', '0007', '00017', 'DLID ', 'WRITE', 'RUNWAY IDENTIFICATION'],
['R', 'AN', '0005', '00024', 'A31 ', 'WRITE', 'PHYSICAL RUNWAY LENGTH (NEAREST FOOT)'],
['R', 'AN', '0004', '00029', 'A32 ', 'WRITE', 'PHYSICAL RUNWAY WIDTH (NEAREST FOOT)'],
['L', 'AN', '0012', '00033', 'A33 ', 'WRITE', 'RUNWAY SURFACE TYPE AND CONDITION'],
['L', 'AN', '0005', '00045', 'A34 ', 'WRITE', 'RUNWAY SURFACE TREATMENT'],
['L', 'AN', '0011', '00050', 'A39 ', 'WRITE', 'PAVEMENT CLASSIFICATION NUMBER (PCN)'],
['L', 'AN', '0005', '00061', 'A40 ', 'WRITE', 'RUNWAY LIGHTS EDGE INTENSITY'],
['L', 'AN', '0003', '00066', 'A30A ', 'WRITE', 'BASE END IDENTIFIER'],
['L', 'AN', '0003', '00069', 'E46 ', 'WRITE', 'RUNWAY END TRUE ALIGNMENT'],
['L', 'AN', '0010', '00072', 'I22 ', 'WRITE', 'INSTRUMENT LANDING SYSTEM (ILS) TYPE'],
['L', 'AN', '0001', '00082', 'A23 ', 'WRITE', 'RIGHT HAND TRAFFIC PATTERN FOR LANDING AIRCRAFT'],
['L', 'AN', '0005', '00083', 'A42 ', 'WRITE', 'RUNWAY MARKINGS (TYPE)'],
['L', 'AN', '0001', '00088', 'A42 ', 'WRITE', 'RUNWAY MARKINGS (CONDITION)'],
['L', 'AN', '0006', '00089', 'E60 ', 'WRITE', 'TYPE OF AIRCRAFT ARRESTING DEVICE'],
['L', 'AN', '0014', '00095', 'E68 ', 'WRITE', 'LATITUDE OF PHYSICAL RUNWAY END (FORMATTED)'],
['L', 'AN', '0011', '00109', 'E68S ', 'WRITE', 'LATITUDE OF PHYSICAL RUNWAY END (SECONDS)'],
['L', 'AN', '0014', '00120', 'E69 ', 'WRITE', 'LONGITUDE OF PHYSICAL RUNWAY END (FORMATTED)'],
['L', 'AN', '0011', '00134', 'E69S ', 'WRITE', 'LONGITUDE OF PHYSICAL RUNWAY END (SECONDS)'],
['R', 'AN', '0007', '00145', 'E70 ', 'WRITE', 'ELEVATION (FEET MSL) AT PHYSICAL RUNWAY END'],
['R', 'AN', '0003', '00152', 'A44 ', 'WRITE', 'THRESHOLD CROSSING HEIGHT (FEET AGL)'],
['L', 'AN', '0004', '00155', 'A45 ', 'WRITE', 'VISUAL GLIDE PATH ANGLE (HUNDREDTHS OF DEGREES)'],
['L', 'AN', '0014', '00159', 'E161 ', 'WRITE', 'LATITUDE AT DISPLACED THRESHOLD (FORMATTED)'],
['L', 'AN', '0011', '00173', 'E161S ', 'WRITE', 'LATITUDE AT DISPLACED THRESHOLD (SECONDS)'],
['L', 'AN', '0014', '00184', 'E162 ', 'WRITE', 'LONGITUDE AT DISPLACED THRESHOLD (FORMATTED)'],
['L', 'AN', '0011', '00198', 'E162S ', 'WRITE', 'LONGITUDE AT DISPLACED THRESHOLD (SECONDS)'],
['R', 'AN', '0007', '00209', 'E160 ', 'WRITE', 'ELEVATION AT DISPLACED THRESHOLD (FEET AGL)'],
['R', 'AN', '0004', '00216', 'A51 ', 'WRITE', 'DISPLACED THRESHOLD - LENGTH IN FEET FROM'],
['L', 'AN', '0014', '00220', 'E164 ', 'WRITE', 'LATITUDE AT TOUCHDOWN ZONE (FORMATTED)'],
['L', 'AN', '0011', '00234', 'E164S ', 'WRITE', 'LATITUDE AT TOUCHDOWN ZONE (SECONDS)'],
['L', 'AN', '0014', '00245', 'E165 ', 'WRITE', 'LONGITUDE AT TOUCHDOWN ZONE (FORMATTED)'],
['L', 'AN', '0011', '00259', 'E165S ', 'WRITE', 'LONGITUDE AT TOUCHDOWN ZONE (SECONDS)'],
['R', 'AN', '0007', '00270', 'E163 ', 'WRITE', 'ELEVATION AT TOUCHDOWN ZONE (FEET AGL)'],
['L', 'AN', '0005', '00277', 'A43 ', 'WRITE', 'VISUAL GLIDE SLOPE INDICATORS'],
['L', 'AN', '0003', '00282', 'A47 ', 'WRITE', 'RUNWAY VISUAL RANGE EQUIPMENT (RVR)'],
['L', 'AN', '0001', '00285', 'A47A ', 'WRITE', 'RUNWAY VISIBILITY VALUE EQUIPMENT (RVV)'],
['L', 'AN', '0008', '00286', 'A49 ', 'WRITE', 'APPROACH LIGHT SYSTEM'],
['L', 'AN', '0001', '00294', 'A48 ', 'WRITE', 'RUNWAY END IDENTIFIER LIGHTS (REIL) AVAILABILITY'],
['L', 'AN', '0001', '00295', 'A46 ', 'WRITE', 'RUNWAY CENTERLINE LIGHTS AVAILABILITY'],
['L', 'AN', '0001', '00296', 'A46A ', 'WRITE', 'RUNWAY END TOUCHDOWN LIGHTS AVAILABILITY'],
['L', 'AN', '0011', '00297', 'A52 ', 'WRITE', 'CONTROLLING OBJECT DESCRIPTION'],
['L', 'AN', '0004', '00308', 'A53 ', 'WRITE', 'CONTROLLING OBJECT MARKED/LIGHTED'],
['L', 'AN', '0005', '00312', 'A50 ', 'WRITE', 'FAA FAR PART 77 (OBJECTS AFFECTING NAVIGABLE AIRSPACE)'],
['R', 'AN', '0002', '00317', 'A57 ', 'WRITE', 'CONTROLLING OBJECT CLEARANCE SLOPE'],
['R', 'AN', '0005', '00319', 'A54 ', 'WRITE', 'CONTROLLING OBJECT HEIGHT ABOVE RUNWAY'],
['R', 'AN', '0005', '00324', 'A55 ', 'WRITE', 'CONTROLLING OBJECT DISTANCE FROM RUNWAY END'],
['L', 'AN', '0007', '00329', 'A56 ', 'WRITE', 'CONTROLLING OBJECT CENTERLINE OFFSET'],
['L', 'AN', '0003', '00336', 'A30A ', 'WRITE', 'RECIPROCAL END IDENTIFIER'],
['L', 'AN', '0003', '00339', 'E46 ', 'WRITE', 'RUNWAY END TRUE ALIGNMENT'],
['L', 'AN', '0010', '00342', 'I22 ', 'WRITE', 'INSTRUMENT LANDING SYSTEM (ILS) TYPE'],
['L', 'AN', '0001', '00352', 'A23 ', 'WRITE', 'RIGHT HAND TRAFFIC PATTERN FOR LANDING AIRCRAFT'],
['L', 'AN', '0005', '00353', 'A42 ', 'WRITE', 'RUNWAY MARKINGS (TYPE)'],
['L', 'AN', '0001', '00358', 'A42 ', 'WRITE', 'RUNWAY MARKINGS (CONDITION)'],
['L', 'AN', '0006', '00359', 'E60 ', 'WRITE', 'TYPE OF AIRCRAFT ARRESTING DEVICE'],
['L', 'AN', '0014', '00365', 'E68 ', 'WRITE', 'LATITUDE OF PHYSICAL RUNWAY END (FORMATTED)'],
['L', 'AN', '0011', '00379', 'E68S ', 'WRITE', 'LATITUDE OF PHYSICAL RUNWAY END (SECONDS)'],
['L', 'AN', '0014', '00390', 'E69 ', 'WRITE', 'LONGITUDE OF PHYSICAL RUNWAY END (FORMATTED)'],
['L', 'AN', '0011', '00404', 'E69S ', 'WRITE', 'LONGITUDE OF PHYSICAL RUNWAY END (SECONDS)'],
['R', 'AN', '0007', '00415', 'E70 ', 'WRITE', 'ELEVATION (FEET MSL) AT PHYSICAL RUNWAY END'],
['R', 'AN', '0003', '00422', 'A44 ', 'WRITE', 'THRESHOLD CROSSING HEIGHT (FEET AGL)'],
['L', 'AN', '0004', '00425', 'A45 ', 'WRITE', 'VISUAL GLIDE PATH ANGLE (HUNDREDTHS OF DEGREES)'],
['L', 'AN', '0014', '00429', 'E161 ', 'WRITE', 'LATITUDE AT DISPLACED THRESHOLD (FORMATTED)'],
['L', 'AN', '0011', '00443', 'E161S ', 'WRITE', 'LATITUDE AT DISPLACED THRESHOLD (SECONDS)'],
['L', 'AN', '0014', '00454', 'E162 ', 'WRITE', 'LONGITUDE AT DISPLACED THRESHOLD (FORMATTED)'],
['L', 'AN', '0011', '00468', 'E162S ', 'WRITE', 'LONGITUDE AT DISPLACED THRESHOLD (SECONDS)'],
['R', 'AN', '0007', '00479', 'E160 ', 'WRITE', 'ELEVATION AT DISPLACED THRESHOLD (FEET AGL)'],
['R', 'AN', '0004', '00486', 'A51 ', 'WRITE', 'DISPLACED THRESHOLD - LENGTH IN FEET FROM'],
['L', 'AN', '0014', '00490', 'E164 ', 'WRITE', 'LATITUDE AT TOUCHDOWN ZONE (FORMATTED)'],
['L', 'AN', '0011', '00504', 'E164S ', 'WRITE', 'LATITUDE AT TOUCHDOWN ZONE (SECONDS)'],
['L', 'AN', '0014', '00515', 'E165 ', 'WRITE', 'LONGITUDE AT TOUCHDOWN ZONE (FORMATTED)'],
['L', 'AN', '0011', '00529', 'E165S ', 'WRITE', 'LONGITUDE AT TOUCHDOWN ZONE (SECONDS)'],
['R', 'AN', '0007', '00540', 'E163 ', 'WRITE', 'ELEVATION AT TOUCHDOWN ZONE (FEET AGL)'],
['L', 'AN', '0005', '00547', 'A43 ', 'WRITE', 'APPROACH SLOPE INDICATOR EQUIPMENT'],
['L', 'AN', '0003', '00552', 'A47 ', 'WRITE', 'RUNWAY VISUAL RANGE EQUIPMENT (RVR)'],
['L', 'AN', '0001', '00555', 'A47A ', 'WRITE', 'RUNWAY VISIBILITY VALUE EQUIPMENT (RVV)'],
['L', 'AN', '0008', '00556', 'A49 ', 'WRITE', 'APPROACH LIGHT SYSTEM'],
['L', 'AN', '0001', '00564', 'A48 ', 'WRITE', 'RUNWAY END IDENTIFIER LIGHTS (REIL) AVAILABILITY'],
['L', 'AN', '0001', '00565', 'A46 ', 'WRITE', 'RUNWAY CENTERLINE LIGHTS AVAILABILITY'],
['L', 'AN', '0001', '00566', 'A46A ', 'WRITE', 'RUNWAY END TOUCHDOWN LIGHTS AVAILABILITY'],
['L', 'AN', '0011', '00567', 'A52 ', 'WRITE', 'CONTROLLING OBJECT DESCRIPTION'],
['L', 'AN', '0004', '00578', 'A53 ', 'WRITE', 'CONTROLLING OBJECT MARKED/LIGHTED'],
['L', 'AN', '0005', '00582', 'A50 ', 'WRITE', 'FAA FAR PART 77 (OBJECTS AFFECTING NAVIGABLE AIRSPACE)'],
['R', 'AN', '0002', '00587', 'A57 ', 'WRITE', 'CONTROLLING OBJECT CLEARANCE SLOPE'],
['R', 'AN', '0005', '00589', 'A54 ', 'WRITE', 'CONTROLLING OBJECT HEIGHT ABOVE RUNWAY'],
['R', 'AN', '0005', '00594', 'A55 ', 'WRITE', 'CONTROLLING OBJECT DISTANCE FROM RUNWAY END'],
['L', 'AN', '0007', '00599', 'A56 ', 'WRITE', 'CONTROLLING OBJECT CENTERLINE OFFSET'],
['L', 'AN', '0342', '00606', 'N/A ', 'DISCARD', 'RUNWAY RECORD FILLER FIELD (BLANK)'],
['END-OF-LIST', '', '0', '0', '', '', 'End of list marker for internal program use ']
];
$rmk_fields=[
['L', 'AN', '0003', '00001', 'N/A ', 'WRITE', 'RECORD TYPE INDICATOR.'],
['L', 'AN', '0011', '00004', 'N/A ', 'WRITE', 'LANDING FACILITY SITE NUMBER'],
['L', 'AN', '0002', '00015', 'N/A ', 'WRITE', 'LANDING FACILITY STATE POST OFFICE CODE'],
['L', 'AN', '0008', '00017', 'N/A ', 'WRITE', 'REMARK ELEMENT NAME'],
['L', 'AN', '0300', '00025', 'N/A ', 'WRITE', 'REMARK TEXT'],
['L', 'AN', '0623', '00325', 'N/A ', 'DISCARD', 'REMARK RECORD FILLER FIELD (BLANK)'],
['END-OF-LIST', '', '0', '0', '', '', 'End of list marker for internal program use ']
];
$apt_count = 0;
$rwy_count = 0;
$rmk_count = 0;
while ($current_line = <input_file>) {
$rec_count++;
$rec_type = substr($current_line, 0, 3);
# Remove comment tp print to screen
# printf "%10d %4s \n", $rec_count, $rec_type;
if ($rec_type eq 'APT') {
$apt_count++;
# Loop thru all the field definitions of the record type identified APT, RWY, RMK.
# Process each field according to the action listed (element 5) Currently only
# Write and Discard are used. currently if it is not write, skip it.
# Other actions to do validations or other processing could be be added.
# Strip leading or trailing whitespace depending on the defined justification.
# lc is the loop counter variable.
for ($lc=0; $apt_fields->[$lc][0] ne 'END-OF-LIST'; $lc++) {
if ($apt_fields->[$lc][5] eq 'WRITE'){
$field_data = substr($current_line, ($apt_fields->[$lc][3]-1), $apt_fields->[$lc][2]);
if ($apt_fields->[$lc][0] eq 'L'){
$field_data =~ s/\s+$// ; #trim trailing whitespace
}
if ($apt_fields->[$lc][0] eq 'R'){
$field_data =~ s/^\s+//; #trim leading whitespace
}
# Remove comment tp print to screen
# printf "%50.50s -->%s<-- \n",$apt_fields->[$lc][6], $field_data;
printf apt_file "%s\|", $field_data;
}
}
printf apt_file "\n";
}
if ($rec_type eq 'RWY') {
$rwy_count++;
# Loop thru all the field definitions of the record type identified APT, RWY, RMK.
# Process each field according to the action listed (element 5) Currently only
# Write and Discard are used. currently if it is not write, skip it.
# Other actions to do validations or other processing could be be added.
# Strip leading or trailing whitespace depending on the defined justification.
# lc is the loop counter variable.
for ($lc=0; $rwy_fields->[$lc][0] ne 'END-OF-LIST'; $lc++) {
if ($rwy_fields->[$lc][5] eq 'WRITE'){
$field_data = substr($current_line, ($rwy_fields->[$lc][3]-1), $rwy_fields->[$lc][2]);
if ($rwy_fields->[$lc][0] eq 'L'){
$field_data =~ s/\s+$// ; #trim trailing whitespace
}
if ($rwy_fields->[$lc][0] eq 'R'){
$field_data =~ s/^\s+//; #trim leading whitespace
}
# Remove comment tp print to screen
# printf "%50.50s -->%s<-- \n",$rwy_fields->[$lc][6], $field_data;
printf rwy_file "%s\|", $field_data;
}
}
printf rwy_file "\n";
}
if ($rec_type eq 'RMK') {
$rmk_count++;
# Loop thru all the field definitions of the record type identified APT, RWY, RMK.
# Process each field according to the action listed (element 5) Currently only
# Write and Discard are used. currently if it is not write, skip it.
# Other actions to do validations or other processing could be be added.
# Strip leading or trailing whitespace depending on the defined justification.
# lc is the loop counter variable.
for ($lc=0; $rmk_fields->[$lc][0] ne 'END-OF-LIST'; $lc++) {
if ($rmk_fields->[$lc][5] eq 'WRITE'){
$field_data = substr($current_line, ($rmk_fields->[$lc][3]-1), $rmk_fields->[$lc][2]);
if ($rmk_fields->[$lc][0] eq 'L'){
$field_data =~ s/\s+$// ; #trim trailing whitespace
}
if ($rmk_fields->[$lc][0] eq 'R'){
$field_data =~ s/^\s+//; #trim leading whitespace
}
# Remove comment tp print to screen
# printf "%50.50s -->%s<-- \n",$rmk_fields->[$lc][6], $field_data;
printf rmk_file "%s\|", $field_data;
}
}
printf rmk_file "\n";
}
}
printf "Airports %10s \n", $apt_count;
printf "Runway %10s \n", $rwy_count;
printf "Remarks %10s \n", $rmk_count;
close(input_file);
close(apt_file);
close(rwy_file);
close(rmk_file);
Marc
-
Archives of linux-aviation: http://mail.nl.linux.org/lists/linux-aviation/
To unsubscribe: send the command "unsubscribe linux-aviation" in the body
of a mail message to <Majordomo@mail.nl.linux.org>.