Solved

Perl Script to Extract Records Split by $ and Indicated on 1st Line

Posted on 2000-03-01
10
297 Views
Last Modified: 2012-05-04
Example input:

STEREOG blah blah blah
blah blah blah blah etc etc ....... blah
$
James blah blah blah blah blah blah blah blah
blah blah blah blah blah
blah blah blah blah various .....blah blah blah various
$
Frank blah blah blah blah blah
blah blah etc etc etc
etc
etc
etc
etc
$
NODE pop pop mingle blah various etc
etc
etc
etc
etc
etc
etc
blah blah
various
$
Long blah blah various blah
blah blah blah blah
various
various
various
blach mink mink blah
$
FPA
blahc
blah
etc
long blah blah blah blah
various
$
STING blah blah blah blah
various
various
various blah blah blah blah
various
blah blah blah blah various
$


Records are indicated by the first word on the first line(STEREOG) and the first word after a $(Frank, NODE, Long, FPA, STING).

How would u write a perl script to separate the STEREOG, the NODE, and the FPA records into three different output files.

Consequently u would have three output files
One:

STEREOG blah blah blah
blah blah blah blah etc etc ....... blah


Two:

NODE pop pop mingle blah various etc
etc
etc
etc
etc
etc
etc
blah blah
various

Three:

FPA
blahc
blah
etc
long blah blah blah blah
various

Any help appreciated.
0
Comment
Question by:tomatocans
10 Comments
 
LVL 3

Expert Comment

by:RobWMartin
ID: 2574641
#!/usr/bin/perl

open(STEREOG,">./stereog.out")
  or die "Couldn't open stereog.out";
open(NODE,">./node.out")
  or die "Couldn't open node.out";
open(FPA,">./fpa.out")
  or die "Couldn't open fpa.out";

$/='$';

while(<>){
  print STEREOG if /^STEREOG/;
  print NODE    if /^NODE/;
  print FPA     if /^FPA/;
}

close STEREOG;
close NODE;
close FPA;


if you name the script splitit, and make sure it is executable, you can invoke by any of these methods:

splitit infile
splitit < infile
cat infile | splitit


0
 
LVL 3

Expert Comment

by:RobWMartin
ID: 2574663
Tom,

Change to the following:

#!/usr/bin/perl

open(STEREOG,">./stereog.out")
  or die "Couldn't open stereog.out";
open(NODE,">./node.out")
  or die "Couldn't open node.out";
open(FPA,">./fpa.out")
  or die "Couldn't open fpa.out";

$/='$';

while(<>){
  s/\$$//;
  print STEREOG if /^\s*STEREOG/;
  print NODE    if /^\s*NODE/;
  print FPA     if /^\s*FPA/;
}

close STEREOG;
close NODE;
close FPA;


Sorry, I didn't catch it sooner.

BTW:  Where did you get all those points!? ;)

Rob
0
 

Author Comment

by:tomatocans
ID: 2574755
Sorry input more complicated than thought here is a good example:

STEREOG                                                                 00010000
' **************************************************************        00011072
'A4E1920 - EFF 3-25-99 - CHANGED ZHU POINT OF TANGENCY                  00020072
'                        PREVIOUS CHANGE IN RSB GRID WAS A4E0830        00030072
' **************************************************************        00040072
'        I     FACILITY IDENTIFICATION, CLASSIFICATION, & TYPE LIST     00050053
'                        OA  (THE ADAPTING CENTER)                      00060053
'                        AA  (ADJACENT ARTS FACILITY--INTERNAL)         00070000
'                        AC  (ADJACENT CENTER)                          00080003
'        D     MAGNETIC DECLINATION                                     00100053
'        L     POINT OF ORIGIN                                          00110053
'        R     RADAR SITE DATA:                                         00120053
'                RADAR SITE ID (3 CHARACTERS)                           00130053
'                LATITUDE OF RADAR SITE (6 CHARACTERS)                  00140053
'                LONGITUDE OF RADAR SITE (7 CHARACTERS)                 00150053
'                RSITE ELEVATION (ANTENNA HEIGHT) IN FEET (5 DIGITS)    00160053
'                MAX ALTITUDE COVERAGE IN HUNDREDS OF FEET (3 DIGITS)   00170053
'        T     POINT OF TANGENCY                                        00180053
'                IF ZHU'S POINT OF TANGENCY CHANGES - RNGBRG RECORD     00190053
'                SHOULD ALSO BE CHANGED.                                00200053
'        C     CONFORMAL RADIUS OF THE EARTH IN NAUTICAL MILES          00210060
'        P     SYSTEM PLANE POINT OF TANGENCY                           00220053
'        $     END OF RECORD                                            00230053
' **************************************************************        00240000
    I   ZCH    OA   LIST        ' REQUEST LISTING FOR P.O.T.            00260053
          L    220751   1021805    '   POINT OF ORIGIN         '0830X   00270066
  '***********************************************************          00270167
  '    ZHU POINT OF TANGENCY FOR A4E1920  305653N/0935323W     '1920    00270272
  '                          POT IN  X/Y  471.375 512.875      '1920    00270372
  '         CONFORMAL RADIUS ADAPTED AT 3440 NM                         00270467
  '***********************************************************          00270567
       R  QRB  310223  0881415   392  800         ' CITRONELLE 1360     00271047
       R  QOM  311707  1021622  3212  800     'KING MTN ARSR-4 3710     00280054
       R  AEX  311851  0923150   154  800                               00290000
       R  HOU  293657  0951023   136  800                               00300000
       R  QYS  305637  0971606   731  800         ' ROGERS,TX. '1360    00301020
       R  SAT  292316  0983759   851  800                               00310000
      R  SOA  302816  1003330  2378  800  'SOA TO BE REMOVED ********** 00350063
       R  LCH  302138  0933041   129  800         ' LCH ARSR-4 '2625    00351040
       R  HRL  260946  0974244    45  600         ' HRL ASR-9 AVR '2560 00352042
       R  QZA  272956  0985809   958  800         ' OILTON ARSR-4 '3636 00353043
       R  NEW  302053  0894646   119  800        ' SLIDELL ARSR-4 '3652 00354050
       R  RSG  300248  1001604  2486  800         ' RSG ARSR-4     3660 00355048
       R  QNA  292029  0965219   345  800         ' MORALES ARSR-4 3714 00356057
       R  PAM  300434  0853639   121  800         ' TYNDALL ARSR-4 1920 00357069
       R  QXX  264328  0922231    75  800         ' SAME AS FIX OLINS   00360056
       R  QYY  253800  0953100    75  800         ' SAME AS FIX CLONN   00370056
                    C    3440                                 '1920     00380071
    I   AIA         AA   T  295954  0952113   ' HOUSTON       '2520     00390032
                    D   06.0E                 ' ARTS IIIA     '4160     00400039
    I   AMS         AA   T  295949  0901511   ' NEW ORLEANS   '1347     00410021
                    D    02.0E                ' ARTS IIIA     '1347     00420039
    I   ASA         AA   T  293332  0982809   ' SAN ANTONIO   '2520     00430032
                    D    06.0E                ' ARTS IIIA NEW '3730     00441058
    I   AAU         AA   T  301129  0973906   ' AUS TRACON    '1950     00450077
                    D    06.0E                ' ARTS IIE      '1905     00460068
    I   ABA         AA   T  304126  0881455   ' MOBILE        '1340     00470016
                    D    02.0E                ' ARTS IIA                00480039
    I   ACR         AA   T  274358  0972349   ' CORPUS CHRISTI '2520    00490032
                    D    07.0E                ' ARTS IIA                00500039
    I   AQI         AA   T  273037  0974812   ' NAS KINGSVILLE '1340    00510016
                    D    08.0E                ' ARTS II                 00520039
    I   ADL         AA   T  292035  1004702   ' LAUGHLIN AFB   '1340    00530016
                    D    10.0E                ' ARTS II                 00540039
    I   AGP         AA   T  302423  0890455   ' GULFPORT       '1340    00570016
                    D    02.0E                ' ARTS IIA                00580039
    I   AFT         AA   T  301248  0915915   ' LAFAYETTE      '2510    00590029
                    D    03.0E                ' ARTS IIA       '2510    00600039
    I   ALC         AA   T  300819  0931338   ' LAKE CHARLES   '2532    00610035
                    D    04.0E                ' ARTS IIA       '2532    00620039
    I   ARY         AA   T  303209  0910859   ' BATON ROUGE    '1340    00630016
                    D    03.0E                ' ARTS IIA                00640039
    I   AJC         AA   T  295656  0940131   ' BEAUMONT       '2520    00650032
                    D    05.0E                ' ARTS IIA                00660039
    I   AVR         AA   T  260946  0974244   ' VALLEY         '1340    00690032
                    D    07.0E                ' ARTS IIA                00700039
    I   APO         AA   T  310329  0931118   ' FT. POLK       '3650    00701044
                    D    04.1E                ' E-ARTS         '3650    00702060
    '    ADJACENT CENTERS                                               00710000
    I   ZCF         AC   4E1  L  290000  1060000 'FT. WORTH             00720060
                              T  324046  0972427              ' 0750    00730060
    I   ZCJ         AC   4E1  L  260000  0913000 'JACKSONVILLE          00740060
                              T  322429  0825333              '1930     00750075
    I   ZCR         AC   4E1  L  171500  0852800 'MIAMI                 00760060
                              T  254236  0765204                        00770060
    I   ZCT         AC   4E1  L  280000  0920000 'ATLANTA               00780060
                              T  342125  0840229                        00790000
    I   ZCM         AC   4E1  L  262835  1002932 'MEMPHIS               00800060
                              T  332329  0902153                        00810060
    I   ZCA         AC   4E1  L  280000  1160000 'ALBUQUERQUE           00820060
                              T  353825  1072249               '1940    00830076
      $                                                                 00840000

EXMAPT                                                                  00010002
'        I     EXTERNAL METER AIRPORT NAME                              00020001
'                  SECTOR LIST DROP INTERVAL (SLDI)                     00030001
'        M     METERING BOUNDARY CROSSING TIME (MBCT)                   00040001
'        $     END OF RECORD                                            00050001
 I  DFW                                                                 00060001
          M    30                                                       00070001
 I  DAL                                         '3150                   00080001
          M    30                               '3150                   00090001
 I  ATL                                         '3150                   00100001
          M    30                               '3150                   00110001
 I  CLT                                         '3150                   00120001
          M    30                               '3150                   00130001
 $                                                                      00140000

FPA                                                                     00010000
'        I     FPA IDENTITY                                             00020000
'        F     FPF IDENTITY                                             00030000
'        E     EPPI                                                     00040000
'        N     NO POST                                                  00050000
'        R     OCEANIC                                                  00060000
'        S     WIND STATION                                             00070000
'        O     NO RADAR COVERAGE                                        00080000
'        A     ARTS NAME                                                00090000
'        C     APPROACH CONTROL (FDEP) NAME                             00100000
'        1     MAJOR AIRWAY NAME FIX FIX                                00110000
'        2     MINOR AIRWAY NAME FIX FIX                                00120000
'        3     BLINE NAME FIX/NODE FIX/NODE                             00130000
'        4     SLINE NAME FIX/NODE FIX/NODE                             00140000
'        M     ALTITUDE/ALTITUDE (INCLUSIVE)                            00150000
'        X     ALTITUDE/ALTITUDE (EXCLUSIVE)                            00160000
'        V     NODE NAME                                                00170000
'        @     LINE SEGMENT CLASS AND TYPE                              00180000
'              42 CENTER/SECTOR BOUNDARIES                              00190000
'              43 OTHER BOUNDARIES                                      00200000
'              44 AIRWAYS                                               00210000
'              45 ADDITIONAL AIRWAYS                                    00220000
'        #     DASH VALUE                                               00230000
'              01 SOLID LINE                                            00240000
'              02 LONG DASH                                             00250000
'              03 SHORT DASH                                            00260000
'        +     CENTER MAP NUMBER  START POINT                           00270000
'        -     CENTER MAP NUMBER  STOP POINT                            00280000
'        P     ADJACENT AIRSPACE/ALTITUDE                               00290000
'        D     DIRECT ROUTE PRIORITY INDICATOR (DRPI)                   00291099
'        Y     YES INDICATOR                                            00310000
'        $     END OF RECORD                                            00320000
     I  0000                                                            00330000
              F SJI                                                     00340000
              C MOB                                                     00350000
              A ABA                                                     00360000
              D  01                    'DRPI                            00370000
              Y                                                         00380000
            M 000/100                                                   00390099
              V MI22                                                    00400000
               @ 44  #  02  + 01 11 08                                  00410099
              P 0400                                                    00420000
              V MI25  P 0400                                            00430000
              V MI14  P 0400                                            00440000
              V NI10  P 2702                                            00450001
              V NI11  P 2503                                            00460001
              V NI30  P 2503                                            00470001
              V NI42  P 2507                                            00480001
              V NI41  P 2507                                            00490001
              V NH04  P ZCJ                                             00500000
              V JX03  P ZCJ                                             00510000
              V MH25  P ZCJ                                             00520000
              V MH23                                                    00530000
              P ZCJ                                                     00540000
              V MH24  P ZCJ                                             00550000
              V MH55  P ZCJ                                             00560000
              V MH21  P ZCJ                                             00570000
              V MI52                                                    00580000
              P ZCJ                                                     00590000
              V MI60  P 2413/070 2406/100                     '1860     00600099
              V MI62  P 2413/070 2406/100                     '1860     00610099
              V MI64  P 2413/070 2406/100                     '1860     00620099
              V MI67  P 2413/070 2406/100                     '1860     00630099
              V MI31  P 2412/070 2406/100                     '1910     00640099
              V MI32  P 0400                                            00650000
      I  0100                                                           00660099
              F MSY                                                     00670000
                    A AMS                                               00680000
              C MSY                                                     00690000
              D 01                     'DRPI                            00700000
              Y                                                         00710000
            M 000/030                                      '2550        00720099
              V LK21  P 2820                                '1860       00740099
              V LK16  P 2820                                '1860       00750099
              V OF15  P 2819                                '1860       00760099
              V OF14  P 2818                                '1860       00760199
              V OF13  P 2817                                '1860       00761099
              V LL25  P 0300                                '1860       00770099
              V LL26  P 0300                                 '2550      00780099
              V LL24  P 0300                                 '2550      00790099
              V LL44  P 0300                                 '2550      00800099
              V ML22  P 0200                                 '2550      00810099
              V ML12  P 0200                                 '2550      00820099
              V MK10  P 0200                                 '2550      00830099
              V MK07  P 0200                                 '2550      00831099
              V MK11  P 0200                                 '2550      00840099
              V MK19  P 0200                                 '2550      00850099
              V MK22  P 0200                                 '2550      00851099
              V MK20  P 0200                                 '2550      00852099
              V MK24  P 0200                                 '2550      00860099
              V MK28  P 3002                                 '2550      00870099
              V MK29  P 3002                                 '2550      00900099
              V MK30  P 3001                                 '2550      00910099
              V MK26  P 3001                                 '2550      00920099
              V MJ04  P 2701                                 '2550      00960099
              V MJ39  P 0400                                 '2550      00961099
              V MJ35  P 0400                                 '2550      00962099
              V MJ14  P 0400                                 '2550      00970099
              V MJ43  P 0400                                 '2550      00980099
              V LJ46  P 0400                                 '2550      00990099
              V LJ06  P 2412                                '1910       00991099
              V LJ43  P 2411                                '1860       01000099
              V LJ04  P 2415                                '1860       01010099
              V LJ03  P 2415                                '1860       01020099
              V LJ09  P 2414                                '1860       01020199
              V OF16  P 2820                                '1860       01020299
            M 031/040                                      '2550        01021099
              V LK21  P 2820                                '1860       01021199
              V LK16  P 2820                                '1860       01021299
              V OF15  P 2819                                '1860       01021399
              V OF14  P 2818                                '1860       01021499
              V OF13  P 2817                                '1860       01021599
              V LL25  P 0300                                '1860       01021699
              V LL26  P 0300                                            01027099
              V LL24  P 0300                                            01028099
              V LL44  P 0300                                            01029099
              V ML22  P 0200                                            01029199
              V ML12  P 0200                                            01029299
              V MK01  P 0200                                            01029399
              V MK11  P 0200                                            01029499
              V MK19  P 0200                                 '2550      01029599
              V MK22  P 0200                                 '2550      01029699
              V MK20  P 0200                                 '2550      01029799
              V MK24  P 0200                                            01029899
              V MK28                                                    01029999
              @ 44  # 02  + 01 11 08                                    01030099
              P 3002                                                    01030199
              V MK29  P 3002                                            01030299
              V MK30  P 3001                                            01030399
              V MK26                                         '2550      01030499
              - 01 11 08                                                01030599
              P 3001                                                    01030699
              V MJ04  P 2701                                 '2550      01030799
              V MJ39  P 0400                                 '2550      01030899
              V MJ35  P 0400                                 '2550      01030999
              V MJ14  P 0400                                            01031099
              V MJ43  P 0400                                            01031199
              V LJ46  P 0400                                            01031299
              V LJ06  P 2412                                '1910       01031799
              V LJ43  P 2411                                '1860       01031899
              V LJ04  P 2415                                '1860       01031999
              V LJ03  P 2415                                '1860       01032099
              V LJ09  P 2414                                '1860       01032199
              V OF16  P 2820                                '1860       01032299
            M 041/100                                      '2550        01033099
              V LK21                                         '2550      01040099
              @ 44  # 02 + 01 11 08                                     01050099
              P 2820/070 2405/100                           '1860       01060099
              V LK16  P 2820/070  3401/100                  '1860       01080099
              V OF15  P 2819/070  3401/100                  '1860       01081099
              V OF14  P 2818/070  3401/100                  '1860       01082099
              V OF13  P 2817/070  3401/100                  '1860       01083099
              V LL25  P 0300                                '1860       01100099
              V LL26  P 0300                                            01110000
              V LL24  P 0300                                            01120000
              V LL44  P 0300                                            01130000
              V ML22  P 0200                                            01140000
              V ML12  P 0200                                            01150000
              V MK01                                                    01160000
              - 01 11 08                                                01170099
              P 0200                                                    01180000
              V MK11  P 0200                                            01190000
              V MK19  P 0200                                 '2550      01191099
              V MK22  P 0200                                 '2550      01192099
              V MK20                                         '2550      01193099
              @ 44  # 02 + 01 11 08                                     01210099
              P 3001                                                    01220001
              V MK26  P 3001                                 '2550      01230099
              V MJ04  P 2701                                 '2550      01240099
              V MJ39  P 0400                                 '2550      01241099
              V MJ35  P 0400                                 '2550      01242099
              V MJ14  P 0400                                            01250000
              V MJ43  P 0400                                            01260000
              V LJ46  P 0400                                            01270000
              V LJ06  P 2412/070 2406/100                   '1910       01271099
              V LJ43  P 2411/070 2406/100                   '1860       01280099
              V LJ04  P 2415/070 2405/100                   '1860       01290099
              V LJ03  P 2415/070 2405/100                   '1860       01300099
              V LJ09  P 2414/070 2405/100                   '1860       01300199
              V OF16  P 2820/070 2405/100                   '1860       01301099
            M 101/150                                                   01310099
              V LK21                                         '2550      01320099
              @ 44  # 02 + 01 11 08                                     01330099
              P 2405                                                    01340070
              V LK31  P 3401                                            01350001
              V MK10  P 3403                                            01360001
              V MK07  P 3404                                            01370001
              V MK11  P 3404                                 '2550      01380099
              V MK19  P 3001                                 '2550      01410099
              V MK22  P 3001                                            01411099
              V MJ03  P 2701                                 '2550      01440099
              V MJ35                                         '2550      01441099
              - 01 11 08                                                01442099

DIRTE                                                                   00010000
'        I     FIX NAMES                                                00020000
'        S     SEGMENT INDICATOR                                        00030000
'              1    DEPARTURE SEGMENT                                   00040000
'              2    ARRIVAL SEGMENT                                     00050000
'              3    ENROUTE SEGMENT                                     00060000
'              4    ALL SEGMENTS                                        00070027
'        E     ELIGIBLE ALTITUDE RANGE                                  00080000
'        W     FIELD 10 FORMAT                                          00090000
'        (     BEGIN ROUTE                                              00100000
'        )     END ROUTE                                                00110000
'        $     END OF RECORD                                            00120000
 I  AEX  DAS                                                            00130000
                    S    03                                             00140000
                    E    000/999                                        00150000
                    W    ( .AEXT. )                                     00160000
 I  AEX  LFK                                                            00170027
                    S    03                                             00180000
                    E    180/999                                        00190000
                    W    ( .J50. )                                      00200000
 I  AEX  EIC                                                  '2470     00210008

         $                                                              01240000
NODE                                                                    00010001
'        I     NODE NAME LATITUDE LONGITUDE                             00020000
'        $     END OF RECORD                                            00030000
     I   AB00     314204     0985350                       '3720        00040099
     I   AB01     315218     0985957                       '3720        00040199
     I   AB02     305030     1021620                                    00041099
     I   CH03     284430     0975200                                    00070000
     I   CH04     284600     0974500                                    00080000
     I   CH05     284630     0974000                                    00090000
     I   CH06     284600     0973500                                    00100000
     I   CH07     284430     0972800                                    00110000
     I   CH08     283940     0972015                                    00120000
     I   CH09     283400     0971510                                    00130000
     I   CH10     282800     0971210                                    00140000
     I   CH11     282200     0971115                                    00150000
     I   CH12     281700     0971130                                    00160000
     I   CH13     281400     0971630                                    00170000
     I   DL00     294630     1022600                                    00180000
     I   DL01     301757     1020855         'ZAB HT00         '0835    00190099
     I   DL02     300120     1021950                                    00191099
     I   DL03     300147     1022052         'ZAB HT01         '0835    00192099
     I   DL04     301720     1020800                                    00200000
     I   DL05     301415     1020320                                    00210000
     I   DL06     294625     1022709         'ZAB HT02         '0835    00211099
     I   DL07     302500     1015200                                    00220000
     I   DL08     300444     1014920                         '1920      00221099
     I   DL09     303330     1013900                                    00230000

               $


Each record has a key which mentions that $ is the indication of a last record.

Also, is there any way to make it so it will pull the record is FPA or STEREOG are at the beginning of the line but in the middle also
0
 

Author Comment

by:tomatocans
ID: 2574765
Sorry cutting and pasting there is also a $ before DIRTE

The records in this example are

STEREOG
EXAMPT
FPA
DIRTE
NODE

ONLY want STEREOG, FPA, and NODE

Code so far:

#!/usr/local/bin/perl

open(IN,"</home/tmclaugh/records/zhu/zhu") or die "Couldn't open zhu";
open(STEREOG,">/home/tmclaugh/records/zhu/stereog.out") or die "Couldn't open stereog.out";
open(NODE,">/home/tmclaugh/records/zhu/node.out") or die "Couldn't open node.out";
open(FPA,">/home/tmclaugh/records/zhu/fpa.out") or die "Couldn't open fpa.out";

$/='$';
while(<>){
s/\$$//;
print STEREOG if /^\s*STEREOG/;
print NODE    if /^\s*NODE/;
print FPA     if /^\s*FPA/;
}

close STEREOG;
close NODE;
close FPA;
0
 

Author Comment

by:tomatocans
ID: 2574767
Not Getting any output Currently
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 3

Expert Comment

by:freesource
ID: 2575389
I think this is what you are looking for.

#!/usr/bin/perl -w

                    open(IN,"stereog") or die "Couldn't open zhu";
                    open(STEREOG,">stereog.out") or die "Couldn't open stereog.out";
                    open(NODE,">node.out") or die "Couldn't open node.out";
                    open(FPA,">fpa.out") or die "Couldn't open fpa.out";

                    PLACE: while (<IN>){
                   if (/^\s*STEREOG/) {
                            print STEREOG;
                            while (<IN>) {
                        next PLACE if $_ =~ /\$\s+END OF RECORD/;                                                         print STEREOG;              
                            }
                        }
                   if (/^\s*NODE/) {
                            print NODE;
                            while (<IN>) {
                        next PLACE if $_ =~ /\$\s+END OF RECORD/;
                                print NODE;
             
                            }
                        }
                   if (/^\s*FPA/) {
                            print FPA;
                            while (<IN>) {
                        next PLACE if $_ =~ /\$\s+END OF RECORD/;
                                print FPA;              
                            }
                        }
                  
                    }
                    close STEREOG;
                    close NODE;
                    close FPA;
0
 
LVL 4

Expert Comment

by:stass
ID: 2575621
Hi, may be this help you.

[cut]
#!/usr/bin/perl -w
#
# You may have as much marks as you want
#

%marks = (STEREOG => ">stereog.out", NODE => ">node.out", FPA => ">fpa.out");

#

sub openfile
 {
   my ($key, $map) = @_;
   local *FH;

   open(FH, $map->{$key}) || die "unable to open file $!\n";
   $map->{$key} = *FH;  
 }

#

for (keys(%marks)) { openfile($_, \%marks); };

while(<>)
 {
   if(/^\s*(\w+)/ && $marks{$1}) { $fout = $marks{$1}; print $1, "\n"; }
   else { next; };
   while(<>)
    {
     last if /^\s*\$/;
     print $fout $_ if $fout;
    }
 }

for (keys(%marks)) { close($marks{$_}); };
[cut]
0
 
LVL 3

Accepted Solution

by:
RobWMartin earned 200 total points
ID: 2577094
Tom,

Sorry I'm just now getting back to it.  You're right; the data is more complex.  We can't reliably use the $/ variable to set the end of record, since regular expressions won't work in $/.  Instead, we can use a print mode flag (i.e. $print), file handle aliasing, and regular expression for finding the "end of record".

The following script works with the new data sample.  The script relies on the fact that END OF RECORD is triggered by a line where the first non-space character is $.  Also, it doesn't print the $ line.  If you want the END OF RECORD line too, then move the print statement above the test for $.

#!/usr/bin/perl

open(IN,"</home/tmclaugh/records/zhu/zhu") or die "Couldn't open zhu";
open(STEREOG,">/home/tmclaugh/records/zhu/stereog.out") or die "Couldn't open stereog.out";
open(NODE,">/home/tmclaugh/records/zhu/node.out") or die "Couldn't open node.out";
open(FPA,">/home/tmclaugh/records/zhu/fpa.out") or die "Couldn't open fpa.out";

while(<IN>){
  *FH=*STEREOG,$print=1 if /^\s*STEREOG/;
  *FH=*NODE,$print=1    if /^\s*NODE/;
  *FH=*FPA,$print=1     if /^\s*FPA/;
  $print=0 if /^\s*\$/;
  print FH  if $print;
}

close STEREOG;
close NODE;
close FPA;


0
 
LVL 3

Expert Comment

by:RobWMartin
ID: 2577104
Ooops, forgot to change to #!/usr/local/bin/perl.

0
 

Author Comment

by:tomatocans
ID: 2577806
Rob

Thanks for your help.
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

On Microsoft Windows, if  when you click or type the name of a .pl file, you get an error "is not recognized as an internal or external command, operable program or batch file", then this means you do not have the .pl file extension associated with …
There are many situations when we need to display the data in sorted order. For example: Student details by name or by rank or by total marks etc. If you are working on data driven based projects then you will use sorting techniques very frequently.…
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 discusses moving either the default database or any database to a new volume.

708 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

12 Experts available now in Live!

Get 1:1 Help Now