#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Nov 2010
    Posts
    20
    Rep Power
    0

    Extract ranges of lines from a file, saving each range to a separate file


    I have a file that looks like this

    Code:
         *TRANSACTION STARTED*
    [020t CARD INSERTED
    [020tCARD: *************5845
    DATE 01-02-16    TIME 05:45:52
     05:46:26 GENAC 1 : ARQC
    EXTERNAL AUTHENTICATE: NO ARPC
     05:46:30 GENAC 2 : AAC
     01 FEB 2016     05:47:41      10160021
    
         WITHDRAW
         FROM XXXXXXXX    ?
    INVALID TRANSCATION ON TERMINAL.
    -----------------------
    [020t 05:47:05 CARD TAKEN
    [020t 05:47:07 TRANSACTION END
    [0r(1)2[000p[040qe1w3h162[020t*742*02/01/2016*05:47*
         *TRANSACTION STARTED*
    [020t CARD INSERTED
    [020tCARD: *************2584
    DATE 01-02-16    TIME 05:47:27
     05:48:00 GENAC 1 : ARQC
     05:48:05 GENAC 2 : TC
    [020t 05:48:16 CARD TAKEN
    [020t 05:48:22 NOTES PRESENTED 0,0,2,0
     01 FEB 2016     05:48:52      10160021
    
         WITHDRAW
         FROM XXXXXXXX    ?
    AMT   GHC40.00
    [020t 05:48:31 TRANSACTION END
    [0r(1)2[000p[040qe1w3h162[020t*743*02/01/2016*05:57*
         *TRANSACTION STARTED*
    [020t CARD INSERTED
    [020tCARD: *************3862
    DATE 01-02-16    TIME 05:57:28
     01 FEB 2016     05:58:33      10160021
    
         INQUIRY
         FROM XXXXXXXX90018
    AVAIL          GHC1260.20  
    LEDGER         GHC1260.20  
    [020t 05:58:06 CARD TAKEN
    [020t 05:58:11 TRANSACTION END
    [0r(1)2[000p[040qe1w3h162[020t*744*02/01/2016*06:43*
         *TRANSACTION STARTED*
    [020t CARD INSERTED
    [020tCARD: *************1972
    DATE 01-02-16    TIME 06:43:53
     01 FEB 2016     06:44:56      10160021
    5029110111271972
    4490    4490
         INQUIRY
         FROM XXXXXXXX23013
    AVAIL          GHC14.28
    LEDGER         GHC14.28
    [020t 06:44:25 CARD TAKEN
    [020t 06:44:29 TRANSACTION END
    [0r(1)2[000p[040qe1w3h162[020t*745*02/01/2016*06:56*
    and need to extract what is between *TRANSACTION STARTED* and TRANSACTION END, ignoring all other information, and create a new file for each range.
    The new file will contain only

    Code:
    [020t CARD INSERTED
        [020tCARD: *************2584
        DATE 01-02-16    TIME 05:47:27
         05:48:00 GENAC 1 : ARQC
         05:48:05 GENAC 2 : TC
        [020t 05:48:16 CARD TAKEN
        [020t 05:48:22 NOTES PRESENTED 0,0,2,0
         01 FEB 2016     05:48:52      10160021
    
             WITHDRAW
             FROM XXXXXXXX    ?
        AMT   GHC40.00
        [020t 05:48:31
    this is What I have but it is not working it dose not save the files in the folder

    Code:
    #! /usr/bin/perl/ 
    
    use warnings;
    use strict;
    
    my $somefile = "/home/lord-ivan/Soures_Code/Perl/projects/Data/EJDATA.LOG";
    
    open (my $fh, '<:encoding(UTF-8)', $somefile) or die "Could not open file '$somefile' $!"; 
    print "$somefile open";
    
    while (<$fh>) {
    	
        if (/TRANSACTION STARTED/ .. /TRANSACTION END/) 
        {
             next if /TRANSACTION\s*(STARTED|END)/;
            print $_;   
        }
    }
    
    close ($somefile);
    
    
    
    my $outputfile = "/home/lord-ivan/Soures_Code/Perl/projects/EJ Transport/Queue/";
    
    if(open (my $ofh, '>>:encoding(UTF-8)',$outputfile))
    {
    	print " $outputfile worked   $!";
    }else
    {
    	die "Could not write to  $outputfile  $!";
    }
    
    
    close ($outputfile);
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Regular (2000 - 2499 posts)

    Join Date
    Apr 2009
    Posts
    2,229
    Rep Power
    1231
    Cross posted on perlguru.com

IMN logo majestic logo threadwatch logo seochat tools logo