2016-04-14 14 views
-3

我有有這樣的數據文件:的Perl:讀文件到一個哈希和分割,信息檢索

1  unknown state 3204563 3207049 . - . name "gosford"; school_name "gosford"; pupil_id "P15240"; transcript_id "NM_001011874.1"; tss_id "TSS13146"; 

我想逐行讀入一個哈希,然後定期把它分解表達式。 。這樣我可以算的學校數量]

到目前爲止,我有:

my$schools; 
open (SCHOOLS, <"$schools) or die (Cannot open $schools"); 
while <SCHOOLS> { 
chomp; 
my ($val, $key) = split /(^\d)\s+\w+\s+\W+\s+\d+\s+\d+\s+\d+\.\s+\+\s+\.\s+.. and so on); 
} 

我如何獲得我已經分裂成散列值,然後操縱它們,從而產生一些基本的統計數據?

+0

您的預期產出是多少? – toolic

+0

計算終端中顯示的學校數量。 – SaltedPork

+0

刪除'split'。你在這裏使用比賽,而不是分裂。之後,在'()'中獲得你感興趣的組。 –

回答

1

這是有點不清楚你以後,但我會提供 - 你正在做的事情艱難的方式使用長的正則表達式匹配線。另外,對於'其他事情',很難準確地說出你的想法。但grep是你的朋友,因爲它可以讓你指定搜索條件。

像這樣的事情會做的。我用一個簡單的例子來計算符合特定標準的條目。當然,鑑於你只給了我們一個排,這是一個有點猜測:

#!/usr/bin/env perl 
use strict; 
use warnings; 
use Data::Dumper; 

my @entries; 
my @keys = qw (id thing state firstnum secondnum); 

while (<DATA>) { 
    my %attributes = m/(\w+) "(\w+)"/g; 
    @attributes{@keys} = split;  
    push @entries, \%attributes; 
} 

print Dumper \@entries; 

print "count of things: ", scalar @entries, "\n"; 
print "There are ", (scalar grep { $_ -> {state} eq "state" } @entries), " things with a state of 'state'\n"; 

__DATA__ 
1  unknown state 3204563 3207049 . - . name "gosford"; school_name "gosford"; pupil_id "P15240"; transcript_id "NM_001011874.1"; tss_id "TSS13146"; 

我還要指出的 - 這是更好的形式使用詞彙的文件句柄與3精氨酸開放。例如。

open (my $schools, '<', 'schools.txt') or die $!; 
while (<$schools>) { 
    #etc. 
} 

我使用特殊的文件句柄__DATA__出於說明的目的。