2017-06-17 41 views
0

我正在處理一個XML文件,並試圖檢查一行是否在整個文檔中包含指定的字符串。讀取文件似乎工作,並將字符串拆分成數組也是成功的。但我的代碼不打印包含指定字符串的行,我無法弄清楚什麼是錯的。我試過三種不同的方法來檢查字符串是否被包含(見下文)。 感謝您的幫助!檢查數組是否包含指定的字符串在Perl中

use strict; 
use locale; 

my($daten1, $daten2, @datenarray1, @datenarray2, $datenarray1, $datenarray2, $i, $j, $l); 

open (FHIN, '0a_nur_Text_nur_795.xml') || die "Die Datei 0a_nur_Text_nur_795.xml konnte nicht geoeffnet werden: $!"; 
     while(<FHIN>) {  

      $daten1=$daten1.$_; #Daten als String einlesen 
      } 


close (FHIN); 

$daten1 = lc $daten1; 

@datenarray1= split(/\n/,$daten1); 


for($i=0; $i<@datenarray1; $i++) 
{ 
    #if(grep { $_ eq '795.25-M'} $datenarray1[$i]) 
    #if($datenarray1[$i] =~m/795.25-M/) 
    if(index($datenarray1[$i], '795.25-M') != -1) 
    { 
     print $datenarray1[$i]; 
    } 
} 

該文件是一個XML文件。

+0

該文件是什麼樣子?請[編輯]你的問題,並加入[mcve]。 –

回答

0

您已將文件的內容轉換爲小寫版本。
$daten1 = lc $daten1;

您查找帶大寫字母的字符串。
if(index($datenarray1[$i], '795.25-M') != -1)

查找,如果字符串(795.25-m),或使用正則表達式與i修改小寫版本。
if($datenarray1[$i] =~ /795\.25-M/i)

BTW 1)你的代碼是非常 「unperlish」 恕我直言。 2)您可以在第一個while循環中查找字符串(在逐行處理文件的過程中)。

+0

謝謝,我是一個完全的Perl初學者,但我會嘗試改進我的代碼。我刪除了我的小寫命令,但打印仍然不起作用,即使我100%確定指定的字符串在文檔中並且閱讀過程成功。有什麼建議麼? – LittleEntertainer

+0

包含處理文件中的幾行。 – AnFi

相關問題