in reply to split file
The following should get you started:
use warnings; use strict; my %bills; my $currBill = 'void'; my $type = 'header'; while (<DATA>) { chomp; if (/^1010100\.+(\d+)/) { $currBill = $1; $type = 'header'; } elsif (/^3010330\.+(\d+)/) { $currBill = $1; $type = 'data'; } else { push @{$bills{$currBill}{$type}}, $_; } } for my $bill (sort keys %bills) { print ">>>> $bill\n"; print "Header\n" . (join "\n", @{$bills{$bill}{'header'}}) . "\n" if exists $bills{$bill}{'header'}; print "Data\n" . (join "\n", @{$bills{$bill}{'data'}}) . "\n" if exists $bills{$bill}{'data'}; } __DATA__ 1010100.........123456..... #header line for bill # 123456 #some data #some data #some data #some data 1010100.........678910..... #header line for bill # 678910 #some data #some data #some data 3010330.........123456..... #bill detail for bill 123456 #some data #some data #some data #some data #some data 3010330.........678910..... #bill detail for bill 678910 data for 678910
>>>> 123456 Header #some data #some data #some data #some data Data #some data #some data #some data #some data #some data >>>> 678910 Header #some data #some data #some data Data data for 678910
Open your files in the for loop, print their contents as required and then close.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: split file
by Anonymous Monk on Feb 10, 2006 at 04:51 UTC | |
by GrandFather (Saint) on Feb 10, 2006 at 05:46 UTC | |
by Anonymous Monk on Feb 13, 2006 at 21:33 UTC | |
by GrandFather (Saint) on Feb 14, 2006 at 11:06 UTC | |
by Anonymous Monk on Feb 14, 2006 at 20:18 UTC |