Hello,

This is kind of sloppy, but it is what I have been able to come up with.
How can I make this more "cleaner"?

The data lines and output are at the end of this mail.


Thank you all.






#!/opt/local/bin/perl
#..................End include subroutines ................

&check_arguments($#ARGV);              #verify command line
&process_arguments(@ARGV);             #input file = $opt_i
                                       #output file = $opt_o
&open_file("INFILE", "", "$opt_i");    #update mode

my(%MAIN_ADD_DECK)= ();

#  ~~~~~~~~~~~ READING OF INPUT FILE BEGINS HERE ~~~~~~~~~~
while ($line = &read_from_file("INFILE")) {
   next if ( (!($line =~ /f.\d{9}\../i )) || $line =~ /^\s*--/ ); # weedout
comment & non data lines
   chomp $line;                              #remove end of line marker
   if ( $line =~ /--/ ){
      split /--/, $line, 2;$line = join '', $_[0];
   }

   if ( $line =~ /\&\&/ ){
      split /\&\&/, $line, 2;$line = join '', $_[0];
   }

   $line =~ s/\s+//g;                        #finally squeeze out spaces
   $line =~ s/new|set//i;

   #... tag family head to members ONLY if you encounter =
   ($family_head, $line)= split /=/, $line, 2 if ( $line =~ /=/); #tag
family head to members
   push @{ $MAIN_ADD_DECK{$family_head} }, "$line";
}
close INFILE;

&open_file("OUTFILE", "", ">$opt_o");  #update mode

foreach $family (sort (keys %MAIN_ADD_DECK )){
   print OUTFILE "$family = {",  @{ $MAIN_ADD_DECK{$family} }, "}\n";
}
close OUTFILE;

#:::::::::::::::::::  SUBROUTINES :::::::::::::::::::::::::::
sub check_arguments{
   local ($num_args) = @_;
   if ( $num_args < 3 ){                 #i.e., 0 1 2 3
      &error_messages;
   }
}

#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# ..........displays appropriate error messages ...........

sub error_messages{
   print("\n\n\n\n                                E   R   R   O   R\n");
   print("\n\n       USAGE: $0 -i {excel filename} -o {output filename }");
   print("\n\n          EG: $0 -i table1a.xls -o table1a.txt\n\n");
   print("\n\n              -  E X E C U T I O N    S U P P R E S S E D  !
! ! - \n\n");
   print ("\a\n\n\n");
   exit (1);                   #++ failure
}

#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# .......... distinguish b/n input/output files ...........

#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sub process_arguments              #determine -d -f -q
{

   #require 'getopts.pl' ;      # do is better than require
   do 'getopts.pl' || die "\n\n\n\a\tCOULD NOT LOCATE getops.pl\n\n\n" ;

   &Getopts('i:o:');                     #similar to getopts
                                         #in sh, but better

   if ( !defined($opt_i) || !defined($opt_o) ){
      &error_messages;
   }
}

#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# ................ open file as sepcified .................

sub open_file
{
   local ($filevar, $filemode, $filename) = @_;
   open ($filevar, $filemode . $filename) ||
      die("\a Can't open $filename");
}


#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#................. read fron input file ...................

sub read_from_file
{
   local ($filevar) = @_;
   <$filevar>;
}
# ................ print to output file....................

sub print_to_file
{
   local ($filevar, $line) = @_;
   print $filevar ($line);
}


#===================================== END OF PROGRAM
============================


--------------------------BEGIN DATA
LINES--------------------------------------
type "CALCULATIONS FOR TRANSACTION F.203 (NET INTERBANK CLAIMS) ARE
COMPLETE"

--******************************************************************************

--******************************************************************************

--CHKDEP
--                   F.204    CHECKABLE DEPOSITS AND CURRENCY
--                          WRITTEN BY DXB ON 10/15/90
--  SERIES OF CALCULATIONS FOR TABLE F.204 -- CHECKABLE DEPOSITS AND
CURRENCY
--******************************************************************************

----------------------------------- BORROWING
----------------------------------
-- --- SCBTOTAL ---
set fa713120005.q = fa713123105.q +fa713122605.q +fa713125005.q
                                       --] MONETARY AUTHORITY = US GOVT
CASH &
                                       --] DEPS, FOREIGN DEPOSITS, AND
CURRENCY
                                       --] OUTSIDE BANKS (FROM DEP)
-- --- SCBTOTAL ---
set fa903023105.q =fa723123105.q +fa713123105.q -fa313020005.q --] USG MAIL
FLOAT = US GOVT DEPS AT BANKS
                                       --] (FROM DEP) AND DEPS WITH THE
MONETARY
                                       --] AUTHORITY LESS TOTAL CASH
BALANCES
                                       --] (FROM FISCAL ANALYSIS)
set fa883011105.q = fa313011105.q +fa713011203.q     --] US GOLD STOCK AND
SDRS = US GOVT, EX STAB
                                                     --] FUND AND MONETARY
AUTHORITY
------------------------------------ LENDING
-----------------------------------
set fa153020005.q =fa793120005.q -fa313020005.q -fa263020005.q
-fa103020000.q &&
        -fa113020003.q -fa133020003.q -fa213020005.q -fa443020005.q &&
        -fa473020000.q -fa513020003.q -fa543020003.q -fa573020005.q &&
        -fa223020003.q -fa613020003.q -fa633020003.q  &&
        -fa663020003.q -fa403020003.q -fa743020003.q -fa903029005.q &&
        -fa603020003.q -fa643020003.q
                                       --] HOUSEHOLDS (RESIDUAL) = TOTAL
LESS US
                                       --] GOVT, FOREIGN, NONFIN.
                                       --] CORP., NONCORP. NONFIN., FARM,
STATE &
                                       --] LOCAL GOVT, CREDIT UNIONS, PROP
&
                                       --] CASULTY INSURANCE, LIFE
INSURANCE,
                                       --] PRIVATE PENSION FUNDS, STATE &
LOCAL
                                       --] GOV'T RETIREMENTS, FIN. COS.,
MONEY
                                       --] MARKET MUTUAL FUNDS, MUTUAL
FUNDS,
                                       --] BROKERS AND DEALERS, SPONSORED
CREDIT
                                       --] AGENCIES, AND COMMERCIAL
BANKS,BPT

-------------------END DATA
LINES-----------------------------------------------------------------


I want to produce So that, with  the following lines of codes:

The script will produce:

$DATA{fa713120005.q} =  {fa713123105.q,fa713122605.q,fa713125005.q}
$DATA{fa903023105.q} = {fa723123105.q,fa713123105.q, -fa313020005.q}
$DATA{fa883011105.q} = {fa313011105.q +fa713011203.q}
$DATA{fa153020005.q} = {fa793120005.q, -fa313020005.q, -fa263020005.q,
-fa103020000.q, -fa473020000.q, -fa513020003.q, -fa543020003.q,
-fa573020005.q,-fa223020003.q, -fa613020003.q, -fa633020003.q,
-fa663020003.q, -fa403020003.q, -fa743020003.q, -fa903029005.q,
fa603020003.q, -fa643020003.q}



with

   foreach $family ( keys %DATA ){
      if ( $family =~ /\d/ ){
      print "$family = {",  @{ $DATA{$family} }, "}\n";
      }
   }



__________________

William Ampeh


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to