2017-06-17 40 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

相关问题