HEELLLP!#!/usr/local/bin/perl # use strict; # my $tomorrows_time = time() + 86400; my $sec; my $min; my $hour; my $mday; my $mon; my $year; my $wday; my $yday; my $isdst; my $month_name; my $newer; my $newline; my $line; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($tom +orrows_time); $month_name=('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OC +T','NOV','DEC')[$mon]; ### DOUBLE-DIGIFY ANY YEAR NUMBERS BELOW 10... if ($year > 99) { $year = $year - 100; if ($year < 10) { $year = "0$year"; } } ### DEFINE GLOBAL VARIABLES... my $date_stamp = "$mday-$month_name-$year"; my $currency_file = "newer.csv"; my %important_currencies = (); $important_currencies{"USD"} = 1; my %currency_abbreviations = (); ### ORACLE HAS SOME FANCY ABBREVIATIONS FOR CURRENCIES AND SUCH... %currency_abbreviations = ( "Australia Dollar" => "AUD", "Canada Dollar" => "CAD", "Germany Mark" => "DEM", "Spain Peseta" => "ESP", "France Franc" => "FRF", "Britain Pound" => "GBP", "Hong Kong Dollar" => "HKD", "Italy Lira" => "ITL", "Japan Yen" => "JPY", "New Zealand Dollar" => "NZD", "Netherland Guilder" => "NLG", "Euro" => "EUR" ); my $currency_abbreviations; my @required_conversions = qw( AUD:USD CAD:USD DEM:USD FRF:USD GBP:USD JPY:USD NZD:USD NLG:USD DEM:GBP FRF:GBP EUR:GBP EUR:USD NZD:AUD ESP:GBP ITL:GBP ); chomp (@required_conversions); ### PARSE THE CURRENCY FILE WHICH NEEDS TO BE IN CSV (Comma-Seperate +d Value) FORMAT open (FINRATES,"<$currency_file"); my @fin_data_holder = <FINRATES>; close (FINRATES); ### PARSE ENTRIES FROM THE FILE, AND ADD THE VALUES OF DESIRED CURRE +NCIES INTO A HASH foreach $line (@fin_data_holder) { ### BECAUSE WE WERE HUNGRY... chomp($line); ### ELIMINATE QUOTE MARKS... $line =~ s/"//g; ### SUBSTITUTE SPACES FOR ':'... $line =~ s/\s+/ /g; ### FOR DEBUGGING... # $line =~ s/\s/:/g; # print "$line\n"; ### SPLIT THE LINE INTO VARS WHICH WE CAN USE! my ($country,$whatever,$usd_equiv_today,$currency_per_usd_toda +y) = split(/,/,$line); ### FOR DEBUGGING... my $newline = "$country $whatever $usd_equiv_today $currency_p +er_usd_today"; ### FOR DEBUGGING... # print "||$country||$usd_equiv_today||$currency_per_usd_today|| +\n"; my $key_entry; my @keys_currency_abbreviations; ### GET THE LIST OF KEYS FROM THE CURRENCY_ABBREVIATIONS HAS +H... @keys_currency_abbreviations = keys %currency_abbreviations; ### ATTEMPT TO MATCH EACH CURRENCY TO THOSE WHICH HAVE ORACL +E ABBREVIATIONS... foreach $key_entry (@keys_currency_abbreviations) { if ($country eq $key_entry) { ### GET THE ABREVIATED CURRENCY-CODE... my $abbrev = $currency_abbreviations{$key_entry +}; ### ADD THE ABBREVIATED CODE AND VALUE TO A H +ASH $important_currencies{$abbrev} = $usd_equiv_tod +ay; #print "Testing: $important_currencies{$abbrev} +"; } } } ### CONVERT THE DESIRED CURRENCIES, AND OUTPUT INTO ORACLE-DESIRED F +ORMAT... my $conversion_entry; my $from_currency; my $to_currency; my $first_currency; my $second_currency; foreach $conversion_entry (@required_conversions) { my $currency_per_usd_today; my ($from_currency,$to_currency) = split(/:/,$conversion_entry) +; my $first_currency = $important_currencies{$from_currency}; my $second_currency = $important_currencies{$to_currency}; my $newrate = 0; ### AVOID ANY NASTY DIVISION-BY-ZERO ERRORS WITH AN EVAL... eval { my $newrate = ($first_currency / $second_currency); }; ### IF EVAL FAILS, LET'S PRINT THE ERROR... print $@; ### OUTPUT IN ORACLE-DESIRED FORMAT... print "$from_currency,$to_currency,$date_stamp,$date_stamp,$ne +wrate\n"; }
Thanks,
bembe0417
Edit by tye
In reply to What is wrong with my calculations? by bembe0417
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |