2014-08-29 128 views
0

我有一个符号下载从数据库产生这种填充符号散列就好了。当我的钥匙排序,我得到这个perl使用哈希过滤另一个哈希内容

foreach $symbol (sort keys %symbol_hash) { 
    print "$symbol\n "; 
} 
A AA AAL AAPL ABBV ABT ABT_SPIN ABX ACI ACN ACT ADBE ADI ADM ADSK AEIS AEO AES AET AFAM AGN AGU AIG AKAM AKS ALL ALNY ALR ALU AMAT AMGN AMP AMZN ANF ANN ANR APA APC ARCC 

我有一个包含的信息很多许多工艺Unix的配置文件。

这是配置文件

# Tick Size 
# tr -d \ | sort -u 
TickSizePostOpen = 1.00 
TickSize = { 
    penny1 = { 
    TickSize = 0.00 
    members = { 
     IWM 
     QQQ 
     SPY 
     SPY_TEST 
    } 
    } 
    penny = { 
    TickSize = </0.000/0.00/0.00 
    members = { 
A 
AA 
AAL 
AAPL 
ABT 
ABT_SPIN 
ZNGA 
    } 
    } 
    notpenny = { 
    TickSize = </9/9.99/9.99 
    } 
} 
BIPP.QuoterOx = { 
    Cup1and2 = { 
    BIPP.QuoterOx = BIPP-ox-1 
    members = { 
     Cup_1 
     Cup_2 
    } 
    } 
TRAP.PxByGroup = 1 
TRAP.Px = { 
    group1 = { 
    TRAP.Px = OPTxxxxxx 
    members = { 
     px.TRAP.1 
    } 
    } 
    group2 = { 
    TRAP.Px = OPTxxxxxx 
    members = { 
     px.TRAP.2 
    } 
    } 
TRAP.QuoterOx = { 
    Cup0 = { 
    TRAP.QuoterOx = QESxxxxx 
    members = { 
     Cup_0 
     Cup_99 
    } 
    } 
    Cup1and4and10 = { 
    TRAP.QuoterOx = ise-ox-1-4-10-dti 
    members = { 
     Cup_1 
     Cup_4 
     Cup_10 
    } 
    } 
Cup56 = { 
    TRAP.AuctionOx = ise-ox-56-ecl 
    members = { 
     Cup_56 
    } 
    } 
} 
TRAP.RotateQuote = { 
    rotatenames = { 
    TRAP.RotateQuote = 1 
     members = { 
       AAPL 
       ADY 
       AEIS 
       AFAM 
       AGP 
       ALNY 
       ZINC 
     } 
    } 
} 
Underlying = { 
    Cup0 = { 
    Underlying = MHR 
    members = { 
     Cup_0 
    } 
    } 
    g1 = { 
    Underlying = CEL 
    members = { 
     Cup_1 
    } 
    } 
} 
BIPP.Px = { 
    group1 = { 
     BIPP.Px = BOXPXMHR1 
     members = { 
      px.BIPP.1 
     } 
    } 
    group2 = { 
     BIPP.Px = BOXPXMHR2 
     members = { 
      px.BIPP.2 
     } 
    } 
} 
TWIG.Px = { 
    AB = { 
    TWIG.Px = TWIGPXMHR1 
    members = { 
    A 
    B 
    } 
} 
    CD = { 
    TWIG.Px = TWIGPXMHR2 
    members = { 
    C 
    D 
    } 
} 
    NOPQR = { 
    TWIG.Px = TWIGPXMHR6 
    members = { 
     N 
    O 
     P 
    Q 
    R 
    } 
} 
    STUV = { 
    TWIG.Px = TWIGPXMHR7 
     members = { 
      S 
      T 
      U 
      V 
     } 
    } 
    WXYZ = { 
    TWIG.Px = TWIGPXMHR8 
     members = { 
      W 
      X 
      Y 
      Z 
     } 
    } 
} 

我所试图做的是从数据库中下载的符号,填充符号散(工作),然后加载在配置文件中的文件,解析它归结为其最亲密的元素,并使用符号哈希作为过滤器,填充便士哈希。因此,如果从精简配置文件中的元素在符号哈希中,请将其放入便士哈希中。


#!/perl/bin/perl 
use strict; 
use warnings; 

use DBI; 
use Data::Dumper; 

my $dbUser = 'yeah'; 
my $dbPass = 'boy';  # <--- was missing closing single quote 
my $dbSid = 'yeah.boy'; 
my $dbh = DBI->connect("dbi:Oracle:$dbSid", "$dbUser", "$dbPass") or die("Couldn't connect: $!"); 

my $penny_file = "/data/wowmom.cfg"; 
my %penny_hash =(); 
my %symbol_hash =(); 
my $query  = "select alotof stuff from yeah.boy "; 
if (!$dbh) { 
    print "Error connecting to Database: $DBI::errstr\n"; 
} 
my $cur_msg = $dbh->prepare($query) or die "\n\nCould not prepare statement: " . dbh->errstr; 
$cur_msg->execute(); 
while (my @row = $cur_msg->fetchrow_array) { 
    $symbol_hash{ $row[0] } = 1; 
} 

open(my $penny_fh, '<', "$penny_file") or die "Can't open $penny_file for reading: $!"; 
while (<$penny_fh>) { 
    next unless /\S/; 
    #print unless /[#{}=]/ ; # try this - the parse works! 
    if (!/[#{}=]/) { 
     if ($symbol_hash{$_}) { 
      $penny_hash{$_} = 1; # does not populate 
     } 
    } 
} 

#foreach my $symbol (sort keys %symbol_hash) { 
# print "$symbol\n "; 
#} # works 

print Dumper(\%penny_hash); #does not work 
#print Dumper(\%symbol_hash) ; # works 
#foreach my $penny (sort keys %penny_hash) { 
# print "$penny\n "; 
#} 

的自卸车(\%penny_hash)打印什么。

+0

这可能仅仅是一个复制/粘贴错误,但你在该行'我的$ DBPASS =“男孩缺少一个右单引号;' – ThisSuitIsBlackNot 2014-08-29 14:28:07

+0

例如,您不是''penny_file''中的''chomp''行,所以您比较'foo'和'foo \ n'。 – ThisSuitIsBlackNot 2014-08-29 14:34:50

+2

有没有人有一个规范的答案忘记'chomp'? – RobEarl 2014-08-29 14:57:07

回答

0

不要忘了你的chomp输入:

while (<$penny_fh>) { 
    chomp;  # <-- remove line endings before string comparison