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>

Reply via email to