2017-12-28 35 views
-1

複数のtxtファイルを読み込んで、単語のユーザー要求を検索するPHPコードがあり、そのコードが存在する場合は、要求された単語に行番号ファイル名を指定します。PHPを使用して各ファイルの行数をリセットするには

システムはすべてのtxtファイルを1つのファイルにまとめて行番号を数え続けるので、コードは完璧ですが問題は行番号にあります。私が欲しいもの

は、各ファイルの最初の行からのシステム起動を行うことである

例:

単語محليシステムのディスプレイに同じライン13 で7つのファイルに存在し、この:

  • 語、アラビア語TEXT.TXTのライン[77]上に存在ライン[13]محلي
  • ワード4-4-2017.txt中に存在محلي
  • ワードمحليXXXX5-4-2017.txt
  • の[240]ライン上に存在するワード線の[302]が存在محليمحليXXXX10-4-2017.txt
  • の[175]ライン上の単語を存在XXXX6-4-2017.txt
  • ワードمحليمحليワード
  • XXXX7-4-2017.txt
  • の[367]ライン上に存在XXXX-08-04-2017.txtの[431]ライン上に存在します

は、まだこの言葉は、ライン上のすべてのこれらのファイルに存在する13

コード:

<?php 

$line = 1; 

if(isset($_POST["search"])) 
{ 
    $search =$_POST['name']; 
foreach(glob($_SERVER['DOCUMENT_ROOT']."/readfiletest/*.txt") as $txts) 
    { 
    $myFileLink = fopen($txts, 'r'); 

    while(!feof($myFileLink)) 
    { 
    $myFileContents = fgets($myFileLink); 
    if(preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches)) 
    { 

     foreach($matches[1] as $match) 
     { 
      echo "the word $match exist on line [$line] in "; 

     } 
     echo basename ($txts) . "<br>".PHP_EOL; 
    //++$line; 
    } 

    ++$line; 

    } 


    fclose($myFileLink); 

    } 
} 

?> 


<html> 
    <head> 
    </head> 
    <meta http-equiv="Content-Language" content="ar-sa"> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <body> 
    <form action="index.php" method="post"> 
      <p>enter your string <input type ="text" id = "idName" name="name" /></p> 
      <p><input type ="Submit" name ="search" value= "Search" /></p> 
    </form> 
    </body> 
</html> 
+0

$行= 1を追加します。この行を最初から削除し、$ myFileLink = fopen($ txts、 'r')の前にforeachループの内側に追加します。 –

+0

@AlamDarjiご協力いただきありがとうございます。 もし私がタイトルのように一度要求された単語を表示したいならば、それがどのように存在する場所を表示したいのですか? –

答えて

1

これにPHPコードを変更してください。これが役立つことを願っています。

<?php 
$line = 1; 
if(isset($_POST["search"])) 
{ 
    $search =$_POST['name']; 
    echo "the word $search exist on <br><br>"; 
    foreach(glob($_SERVER['DOCUMENT_ROOT']."/readfiletest/*.txt") as $txts) 
    { 
     $myFileLink = fopen($txts, 'r'); 
     while(!feof($myFileLink)) 
     { 
      $files[] = basename($txts); 
      $myFileContents = fgets($myFileLink); 
      if(preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches)) 
      { 
       foreach($matches[1] as $match) 
       { 
        //echo "line [$line] in "; 
        $lines[str_replace(" ", "_", basename($txts))][] = $line; 
       } 
       //echo basename($txts) . "<br>".PHP_EOL; 
      } 
      ++$line; 
     } 
    fclose($myFileLink); 
    } 
} 
?> 

、体内のこの

<?php if(isset($_POST["search"]) && !empty($files)): ?> 
<table border="1"> 
    <thead> 
     <tr> 
      <td>File Name</td> 
      <td>Line No.</td> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <?php foreach ($files as $name): ?> 
       <td><?= $name; ?></td> 
       <td><?= implode(', ', $lines[str_replace(" ", "_", $name)]); ?></td> 
      <?php endforeach ?> 
     </tr> 
    </tbody> 
</table> 
<?php endif; ?> 
+0

あなたのコードは完璧に動作しますが、それでもいくつかの行にエラーが表示されます。私はこの文字列システム表示のために検索した後 : ワードالنظام4-4-2017.txt 行に[58] 4-4-2017.txt ラインに行の[57]が存在[62 ] 4-4-2017.txtの行[62] =============最後の行が不正です –

+0

最後の行に2回一致するかもしれません{line [62 ] in line [62] 4-4-2017.txt} –

+0

はい、あなたが正しいと思います... 私は1000以上のファイルがあるかどうか質問します。 –

関連する問題