2013-04-01 84 views
2
  1. 我的腳本正在從.txt文件中獲取數據。
  2. 我需要打印數據,直到找到該文件中的「MSISDN1」。

我已經執行的代碼是:打印文件直到找到某些字符

open (SERVICE, "Service Req.txt") || die "Cannot open service req file $!\n"; 
my @serv=<SERVICE>; 

open(LOG, ">>logfile.txt"); 

foreach $ser_req(@serv) { 

#until ($ser_req =~ m/MSISDN1/g) 
{ 
print $conn $ser_req; 
print LOG $ser_req; 
    print $ser_req; 
} 

close(LOG); 
close (SERVICE) || die "Cannot close service req file $!\n"; 

代碼不運行良好,當直到條件是取消註釋。

代碼中有一個非常微小的錯誤。 直到循環不應該被應用。

+2

'直到'開始循環。你可能想要'最後如果$ ser_req =〜/ MSISDN1 /;'而不是('until')循環。你也需要平衡你的大括號{...}。你可以在嗅到內存後立即合理地關閉「SERVICE」;儘可能快地釋放文件等資源。如果你決定不偷懶,那麼你用''替換'foreach'()'或類似的東西。 –

+0

謝謝你的精彩建議。 –

+1

@Jonathan Leffler,很好的解釋了問題所在。做出答案。 – ikegami

回答

1

until開始循環。您可能想要

last if $ser_req =~ /MSISDN1/; 

而不是(until)循環。你也需要平衡你的大括號{ ... }

在將文件sl到內存後,您可以明智地關閉SERVICE。儘可能快地釋放文件等資源是個好主意。如果您決定不要啜泣整個文件(這可能會更好,尤其是如果標記文本出現在大文件的開頭附近),那麼您可以用while (<SERVICE>)或類似的東西代替foreach循環。

相關問題