2017-06-17 13 views
0

XMLファイルを使用していますが、文書全体に指定されたStringが含まれているかどうかを確認しようとしています。ファイルの読み込みがうまくいくように見え、文字列を配列に分割することも成功しました。しかし、私のコードは、指定された文字列を含む行を印刷せず、何が間違っているのか理解できません。私はStringが含まれているかどうかをチェックする3つの異なる方法を試しました(下記参照)。 助けてくれてありがとう!配列に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ループで文字列を検索することができます(ファイルを1行ずつ処理中)。

+0

ありがとう、私はPerlの初心者ですが、コードを改善しようとします。私は小文字のコマンドを削除しましたが、指定された文字列がドキュメントにあり、読み込みプロセスが成功したことを100%確信していても、印刷はまだ動作しません。助言がありますか? – LittleEntertainer

+0

処理されたファイルから数行を含めます。 – AnFi