2010-08-21 83 views
4

我有一個關於我將調用源ID的文件。我想讀取該文件並根據源ID爲其添加一個名稱,例如15431 = MyTV8。我有一個列出源ID和名稱的文件,但我不知道如何讀取原始ID並將頻道映射文件中的名稱添加到具有源ID的文件中。如何讀取文件並用名稱替換該值

源ID的小樣本我輪詢

13431 
0 
4112 
4129 
11412 
0 
0 
12055 
0 
0 
4129 
0 
0 
12125 
12120 
0 
10959 
5370 
5380 
4109 
0 
20121 
0 
12334 
11493 
0 
0 
4107 
5687 
0 
4008 
0 
0 
4166 
5378 
4203 
0 
12056 
0 
0 
0 
0 
4286 
4183 
0 
0 
4129 
4037 
0 
10555 
12209 
11205 
8846 
0 
0 
5380 
4719 
0 
4166 
4117 
4150 
0 
4183 
0 
4123 
10391 
0 
4183 
4151 
5531 
4107 
4179 
4185 
4203 
4203 
0 
4107

他們只是在文本文件中,這裏是源ID的信道映射

1052 SCIFI     
1053 COMEDY     
1066 CSPAN2     
1067 ESPN CLASSIC    
1100 SUNSHINE FOOTBALL  
1133 TRUTV     
1241 SHOWTIME 2 EAST   
1312 MC METAL     
1315 MC KIDS ONLY    
1318 MC HIP HOP & R&B   
1319 MC MC MIX TAPE   
1324 MC LITE CLASSICAL  
1326 MC SINGERS & SWING  
1330 MC R&B CLASSICS   
1332 MC MEXICANA    
1334 MC RAGGAE    
1338 MC HIP HOP CLASSICS  
1339 MC SOUND OF SEASON  
1340 MC HIT LIST    
1346 MC PARTY FAVORITES  
1348 MC POP HITS    
2006 COLLEGE SPORTS TV  
2469 WGCU WORLD    
2470 WGCU ED TV    
3014 ACTION MAX WEST   
3048 SHOWTIME SHOWCASE 3  
3051 STARZ! 1 WEST   
3059 JEWELRY TV    
3064 STARZ! IN BLACK   
3068 WAM.      
3069 STARZ! 5 CINEMA WEST  
3093 NICK TOO     
4003 ACTION WEST    
4008 NOGGIN     
4011 ENCORE DRAMA EAST  
4029 LOGO MTV     
4037 MOVIEPLEX    
4068 FCS SOCC     
4070 EWTN DIGITAL    
4081 TELEFUTURA    
4100 ADS-AMC     
4101 ADS-A&E     
4103 ADS-BET     
4104 ADS-BRVO     
4105 ADS-C-SPAN    
4107 ADS-TOON     
4108 ADS-CMT     
4109 ADS-CNBC     
4110 ADS-CNN     
4112 ADS-CMDY     
4115 ADS-TRUTV/COURT-TV  
4117 ADS-E!     
4119 ADS-ESPN     
4120 ADS-ESPN2    
4121 ADS-EWTN     
4123 ADS-HALLMARK    
4124 FIT TV     
4125 ADS-FX     
4127 ADS-CCTV     
4128 ADS-HIST     
4129 ADS-HGTV     
4130 ADS-HSN     
4150 ADS-MSNBC    
4151 ADS-MTV     
4156 ADS-NICK     
4157 BARKER     
4159 PLAYBOY DIR. CUT /CP  
4163 ADS-STYLE    
4164 ADS-QVC     
4166 ADS-SCIFI    
4178 ADS-DSC     
4179 ADS-FAM     
4181 ADS-TLC     
4182 ADS-SPIKE    
4183 ADS-USA     
4184 ADS-TWC-DIGITAL   
4185 ADS-TNT     
4186 ADS-FOOD     
4187 ADS-VH-1     
4203 ADS-FXNEW    
4241 ADS-TRAVL    
4286 ADS-TCM     
4460 GAME SHOW    
4485 MTV2.     
4545 SUNDANCE EAST   
4557 ADS-TVL     
4702 ADS-VERSUS    
4705 ADS-SPEED    
4719 ADS-GOLF     
4730 ADS-WGN     
5012 ADS TEST 1    
5013 ADS TEST 2    
5014 ADS TEST 3    
5015 ADS TEST 4    
5016 ADS TEST 5    
5017 ADS TEST 6    
5018 ADS TEST 7    
5019 ADS TEST 8    
5020 ADS TEST 9    
5021 ADS TEST 10    
5022 ADS TEST 11    
5023 ADS TEST 12    
5024 SUN SPORTS HD   
5286 SHOP NBC.    
5368 ADS-WEDU     
5369 ADS-WXPX     
5370 ADS-WFLA     
5377 ADS-WTOG     
5378 ADS-WTSP     
6031 ADS-WRXY     
6166 ADS-WWSB     
6206 ADS-WZVN     
6884 DXD/TOON DISNEY  
7064 MY38 WB HD    
7077 BLOOMBERG TV    
7085 BIG TEN     
7086 BIG TEN 2    
7090 ADS-HALLMARK VS   
7331 CURRENT TV    
7795 G4.      
8282 BIOGRAPHY    
8285 HISTORY INTER.   
8434 ADS-WTTA     
8445 OUTDOOR CH    
8499 OXYGEN     
8675 DO IT YOURSELF   
8841 WEATHERSCAN    
8846 LIFETIME MOVIE NET.  
8888 BRAVO     
9144 NHL & MLB GAME 1   
9145 NHL & MLB GAME 2   
9145 NHL & MLB GAME 2   
9145 NHL & MLB GAME 2   
9146 NHL & MLB GAME 3   
9146 NHL & MLB GAME 3   
9147 NHL & MLB GAME 4   
9147 NHL & MLB GAME 4   
9147 NHL & MLB GAME 4   
9148 NHL & MLB GAME 5   
9148 NHL & MLB GAME 5   
9148 NHL & MLB GAME 5   
9149 NHL & MLB GAME 6   
9149 NHL & MLB GAME 6   
9149 NHL & MLB GAME 6   
9150 NHL & MLB GAME 7   
9150 NHL & MLB GAME 7   
9150 NHL & MLB GAME 7   
9151 NHL & MLB GAME 8   
9151 NHL & MLB GAME 8   
9151 NHL & MLB GAME 8   
9152 NHL & MLB GAME 9   
9152 NHL & MLB GAME 9   
9152 NHL & MLB GAME 9   
9153 NHL & MLB GAME 10  
9153 NHL & MLB GAME 10  
9201 FUSE      
9237 THEN/GAS    
9472 C-SPAN3     
9544 TV GAMES     
9550 SOAPNET     
9597 GAC      
10000 CINEMAX     
10001 ENCORE EAST    
10002 HBO-2     
10004 HBO-3 SIGNATURE   
10005 SHOWTIME EAST   
10006 STARZ! 1 EAST   
10008 DISNEY CHANNEL.   
10010 TMC      
10011 SHOWTIME EXTREME E  
10012 HBO WEST     
10014 CINEMAX WEST    
10021 ADS-ANPL     
10023 CINEMAX MORE MAX -2  
10025 TMC XTRA 2 EAST   
10026 ACTION MAX EAST   
10028 THRILLER MAX EAST  
10041 NICKTOONS    
10042 MTV JAMS     
10045 VH-1 SOUL    
10046 CMT PURE     
10057 OUTERMAX EAST   
10063 STARZ! 4 KIDS FAMILY  
10065 STARZ! 5 CINEMA EAST  
10067 VH-1 CLASSIC    
10098 HBO LATINO E    
10389 WORD      
10391 NATIONAL GEOGRAPHIC  
10398 DAYSTAR TV    
10475 SHOWTIME FAMILY   
10555 @MAX EAST    
10556 WOMANMAX     
10558 5STARMAX EAST   
10584 FCS ATL     
10585 FCS CEN     
10586 FCS PAC     
10911 SHOWTIME HDTV   
10935 THEATER HD CMCHD4  
10959 MTV HITS     
10962 FINE LIVING/COOK TV  
11101 ADS-CW6/WTVK46   
11126 ADS-PAX/ION   
11132 ADS-WMOR     
11205 ADS-SNN     
11242 RFD-TV     
11299 ADS-ESPN HD    
11320 ADS-LIFE     
11324 ADS-FSN-FLORIDA   
11328 ADS-CC-SPORT-S   
11406 ADS-DHC     
11411 ADS-SUN     
11412 ADS-CNN-HDLN    
11414 ESPNU     
11431 NBA TV     
11446 SPORTSMAN    
11493 TENNIS TV    
11514 ESPN SPPV1    
11515 ESPN SPPV2    
11516 ESPN SPPV3    
11517 ESPN SPPV4    
11518 ESPN SPPV5    
11519 ESPN SPPV6    
11647 GOL TV     
11684 UNIVERSAL HD CMCHD2  
11714 STARZ COMEDY    
11716 STARZ HD     
11855 TV ONE.     
11911 ADS-TNTHD    
12002 CENTRIC     
12016 HBO EAST     
12020 IFC      
12023 LOVE STORIES E.   
12027 MYSTERY EAST    
12030 OVATION     
12032 SHOWTIME 2 EAST   
12037 STARZ! EDGE    
12044 WESTERNS EAST   
12045 ACTION EAST    
12049 DISCOVERY KIDS   
12050 PLANET GREEN    
12051 DISCOVERY SCIENCE  
12055 WE.      
12056 MILITARY CHANNEL.  
12112 ESPNEWS     
12120 DISC ID     
12125 NFL NETWORK    
12130 FLIX EAST    
12174 SHOWTIME BEYOND EAST  
12175 BBC AMERICA    
12209 ADS-TBS     
12306 ADS-REALTY-TV-PC   
12333 ADS-LOPC     
12334 ADS-ACCESS-CH-19   
12336 ADS-SARASOTA-ED   
12339 ADS-LO     
12340 ADS-TV-GUIDE    
12393 WXPXHD     
12800 ADS-ESPN2HD    
12810 WFTX FOX HD    
12817 ADS-TBS HD    
13008 HBO ZONE EAST   
13011 HBO FAMILY EAST   
13013 HBO COMEDY EAST   
13017 WZVN PC HDTV    
13039 WBBH PC HDTV    
13050 NAT GEO WILD    
13072 HALLMARK MOVIE CH  
13104 GOSPEL MUSIC TV   
13135 HBO HD CMCHD5   
13136 MAX HD CMCHD5   
13229 SPROUT "E" NETWORKS  
13268 WFLA NBC HD    
13289 WTVT FOX HD    
13406 EMPLOYEE CHANNEL   
13430 INDIEPLEX    
13431 RETROPLEX    
13467 ADS-SCI-FI HD   
13551 PALADIEA HD    
13738 HGTV HD CMCHD1   
13745 NATGEO HD CMCHD3   
13907 TV FOOD HD CMCHD2  
14102 NFLHD     
14507 ADS-WNFM-8    
14710 A&E HD CMCHD1   
15000 IN DEMAND 1    
15001 IN DEMAND 2    
15045 SHORTEEZ ADULT   
15067 NBA TEAM 1    
15068 NBA TEAM 2    
15069 NBA TEAM 3    
15070 NBA TEAM 4    
15071 NBA TEAM 5    
15072 NBA TEAM 6    
15073 NBA TEAM 7    
15074 NBA TEAM 8    
15075 NBA TEAM 9    
15076 NBA TEAM 10    
15128 REELZ     
15201 VERSUS - HD    
15238 NHL & MLB GAME 14  
15239 NHL & MLB GAME 13  
15240 NHL & MLB GAME 12  
15241 NHL & MLB GAME 11  
15364 MTV SPANISH TR3   
15542 PENTHOUSE/TEN ADULT  
16116 ADS-FOX BUSINESS   
16120 ANIMAL HD CMCHD4   
16121 SCIENCE HD CMCHD8  
16122 TDC HD CMCHD3   
16123 TLC HD CMCHD5   
16129 USA HD CMCHD3   
16141 CNN HD CMCHD7   
16240 LIFETIME MOVIENET HD  
16280 NHL NETWORK    
16317 RETIREMENT TV   
16346 FX HD CMCHD9    
16403 GOLF HD CMCHD7   
16414 AMC HD CMCHD7   
16430 BIOGRAPHY HD    
16543 SPEED HD CMCHD9   
16547 SPIKE HD     
16686 DISNEY HD CMCHD-8  
16692 FAMILY HD CMCHD8   
16713 NICKELODEON HD   
16756 FOX NEWS HD CMCHD9  
16788 WEDU HD     
16792 WTSP DIGITAL WEATHER  
16793 WTSP HDTV    
16798 LIFETIME HD    
16807 WWSB HDTV    
16817 PLANET GREEN HD   
17000 FRESH ADULT    
17512 MLB NETWORK    
17535 MLBHD     
18030 WGCU HD PBS    
18324 HEADLINE NEWS HD   
18333 TCM HD     
18411 TRU TV HD    
18630 FOX SPORTSNET FL HD  
19005 3DTV 1     
19421 3DTV 2     
20101 MC 90'S     
20102 MC ADULT ALTERNATIVE  
20104 MC RAP     
20105 MC THROWBACK JAMZ  
20106 MC CONTEMP CHRISTIAN  
20107 MC CLASSIC COUNTRY  
20108 MC TODAY'S COUNTRY  
20110 MC ROCK     
20112 MC GOSPEL    
20113 MC RETRO ROCK   
20115 MC TODDLER TUNES   
20116 MC SOFT ROCK    
20119 MC SOUNDSCAPES   
20120 MC JAZZ     
20121 MC SMOOTH JAZZ   
20122 MC CLASSICAL MASTERP  
20124 MC 80'S     
20126 MC EASY LISTENING  
20127 MC POP LATINO   
20128 MC SOLID GOLD OLDIES  
20129 MC R&B SOUL    
20131 MC TRUE COUNTRY   
20282 MC STAGE & SCREEN  
20284 MC MUSICA URBANA   
20287 MC TROPICALS    
20289 MC CLASSIC ROCK   
20338 MC CLASSIC ALTERNATV  
20339 MC DANCE ELECTRONICA  
20357 MC ALTERNATIVE   
20358 MC ROMANCES    
20359 MC BLUES     
20360 MC 70'S     
21170 STARZ! HD CMCHD1   
21203 SCI FI HD CMCHD2   
21442 THC HD CMCHD4   
23104 E! HD     
23105 TRAVEL HD    
23106 CARTOON HD    
23107 CSS HD.     
23109 NFL RED ZONE    
23110 IND HDPPV    
23111 IND HDPPV2    
23112 ESPNU HD
+1

這將是很好,如果你添加你的示例文件 – 2010-08-21 10:40:34

+0

我只是做了一點關於佩德羅的代碼重新因素,它的工作非常感謝您的幫助! – evilbits 2010-08-22 16:07:16

回答

4

有一種普遍的模式在這裏,正是這樣:這是一組交集問題,因此可以用Perl「sets」輕鬆解決,我們稱之爲哈希:)。

該方法是創建一個數據文件的集合(即將其索引到散列表中,如下所示:%set = (a => 1, b => 1, c => 1),其中實際值不重要,因爲我們要用「集合成員運營商」exists)。

一旦你有了它,通過其他數據集並測試上面的%set中其中一個鍵(在你的情況下,源ID)的成員資格是一件簡單的事情。

因此,假設該信道映射文件的格式如下:

ID,NAME

和源ID文件每行只有一個ID中,你可以做到以下幾點:

open my $CHANNEL_MAP, q{<}, $channel_map_file_name or die $!; 
my %channel_map 
    = map { 
     chomp; 
     my @mapping = split /,/; 
     $mapping[0] => $mapping[1] # not needed, just being explicit. 
     } <$CHANNEL_MAP>; 
close $CHANNEL_MAP or die $!; 

# source ID file passed as a command line argument 
while (<>) { 
    chomp; 
    print "$_ = $channel_map{$_}\n" 
     if exists $channel_map{$_}; 
} 

但是,這似乎有點沒有意義,因爲您似乎只想通過現有源ID過濾頻道映射文件。在這種情況下,您可以簡單地爲源ID文件編制索引(使用上述技術),然後簡單地瀏覽通道映射文件並打印源ID中存在ID的每一行。

+0

非常感謝您的幫助!這絕對讓我走上了正軌,也將幫助我更多地理解perl。 – evilbits 2010-08-22 02:58:39

0

這一切都很模糊,因爲你不清楚你的文件的格式。

但是,假設您有一個名爲names.txt的文件,其中列出了「15431 = MyTV8」格式的名稱,每行一個,而您有另一個文件,同時只列出數字,您可以使用如下所示的內容:

#!/usr/bin/perl 

open NAMES, '< names.txt' or die [email protected]; 
my %names = map { /(\d+) = (.+)/; ($1, $2) } (<NAMES>); 

while (<>) 
{ 
    chomp; 
    if (exists $names{$_}) { 
     print "$_ = $names{$_}\n"; 
    } else { 
     print "$_\n"; 
    } 
} 
相關問題