Hello All,
Thanks for reading my email. I am trying to read a fix length text file and
extract specific substrings from each line. I would like to extract
specific things depending on which line is being read so I can avoid picking
up trash reading every line. The pattern repeats itself over and over again
until completion, so I think I should set a counter and then use the counter
to choose which set to extract, then I will reset the counter again to
repeat the process. I am having trouble understanding how to set the
counter and determine what line is being read to extract.
Any help or hints would be greatly appreciated.
Thanks Again and Merry Christmas.
Will Martell
Dallas Texas
PS. A sample of the data is attached for your review.
Here is my code.-------------------------------------------#!/perl
open (INFILE, "artb30_short.da4") || die "Can't open artb30.da4 file.";
my @order_detail;
@data = <INFILE>;
foreach $row ( @data ){
if( $row == 1 ){
# extract fields for row 1
my %item1 = (
cust_number => substr( $line, 0, 6 ),
cust_name => substr( $line, 8, 31 ),
cycle => substr( $line, 40, 5 ),
customer_type => substr( $line, 47, 15 ),
acct_contact => substr( $line, 64, 20 ),
phone => substr( $line, 86, 15 ),
credit_limit => substr( $line, 104 )
);
# trim spaces
while ( my ($key, $value) = each %item1 ) {
$value =~ s/^\s+//; #beginning spaces
$value =~ s/\s+$//; #ending spaces
}
# save for later processing
push @order_detail, \%item1;
} elsif ( $row = 2 ) {
# extract fields for row 2
my %item2 = (
inv_no => substr( $line, 0, 6 ),
type => substr ( $line, 6, 3 ),
inv_date => substr( $line, 12, 3 ),
current => substr( $line, 23, 8 ),
days_1_30 => substr( $line, 36, 11 ),
days_31_60 => substr( $line, 51, 11 ),
days_61_90 => substr( $line, 64, 11 ),
days_over_90 => substr( $line, 78, 11 ),
on_hold => substr( $line, 92, 11 ),
unap_cash => substr( $line, 106, 11 ),
total_ar => substr( $line, 120, 11 )
);
# trim spaces
while ( my ($key, $value) = each %item2 ) {
$value =~ s/^\s+//; #beginning spaces
$value =~ s/\s+$//; #ending spaces
}
# save for later processing
push @order_detail, \%item2;
} else {
# extract fields for row 3
my %item3 = (
cust_totals_current => substr( $line, 23, 8 ),
cust_totals_days_1_30 => substr( $line, 36, 11 ),
cust_totals_days_31_60 => substr( $line, 51, 11 ),
cust_totals_days_61_90 => substr( $line, 64, 11 ),
cust_totals_days_over_90 => substr( $line, 78, 11 ),
cust_totals_on_hold => substr( $line, 92, 11 ),
cust_totals_unap_cash => substr( $line, 106, 11 ),
cust_totals_total_ar => substr( $line, 120, 11 )
);
# trim spaces
while ( my ($key, $value) = each %item3 ) {
$value =~ s/^\s+//; #beginning spaces
$value =~ s/\s+$//; #ending spaces
}
# save for later processing
push @order_detail, \%item3;
}
}
PSS. I would like to thank
Bill Luebkert
Randy Sims
Richard Morse
Chuck Charbeneau
For all there help in the past. You guys are great, I really appreciate
your assistance.
Merry Christmas!!
19:36:36 XXXXXXXX
PAGE: 1
FUNCTION: ARTB XXXXXXXXXXXXXXXXXXXX
DATE: 12/17/2003
FROM: 000000 THRU: 999999 SORTED: CUSTOMER CLASS
1
===================================================================================================================================
CUSTOMER GROUP: CUSTOMER CLASS 1 =
===================================================================================================================================
CUS ID CUSTOMER NAME CYCLE CUSTOMER TYPE ACCT CONTACT
PHONE CREDIT LIMIT
------ ------------------------------ ----- --------------- --------------------
--------------- --------------
003678 XXXXXXXXXXXXXXXXXXXXXXXXXXXX 1 OPEN ITEM
0.00
INV NO TYP INV DATE CURRENT 1-30 31-60 61-90 OVER
90 ON HOLD UNAP CASH* TOTAL A/R
------ --- -------- ----------- ----------- ----------- -----------
----------- ----------- ----------- -----------
054616 I 121703 603.73
603.73
CUSTOMER TOTALS ----------- ----------- ----------- -----------
----------- ----------- ----------- -----------
603.73
603.73
-----------------------------------------------------------------------------------------------------------------------------------
CUS ID CUSTOMER NAME CYCLE CUSTOMER TYPE ACCT CONTACT
PHONE CREDIT LIMIT
------ ------------------------------ ----- --------------- --------------------
--------------- --------------
003662 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1 OPEN ITEM
0.00
INV NO TYP INV DATE CURRENT 1-30 31-60 61-90 OVER
90 ON HOLD UNAP CASH* TOTAL A/R
------ --- -------- ----------- ----------- ----------- -----------
----------- ----------- ----------- -----------
054601 I 121603 4,900.00
4,900.00
CUSTOMER TOTALS ----------- ----------- ----------- -----------
----------- ----------- ----------- -----------
4,900.00
4,900.00
-----------------------------------------------------------------------------------------------------------------------------------
===================================================================================================================================
GROUP TOTALS ----------- ----------- ----------- -----------
----------- ----------- ----------- -----------
5,503.73
5,503.73
PERCENTAGE OF TOTAL 100.00
100.00
=========== =========== =========== ===========
=========== =========== =========== ===========
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>