2016-06-29 11 views
0

単語 "tak"で始まる* .txtファイル行にあるPHPプログラムを作成し、そのプログラムをスキップして次の* .txtファイルに書き換えます。だから今私が達成したいのは、例えば "tak"という単語で始まった行の後に2行以上書き込むことを防ぐことです。ここに私のコードは次のとおりです。x行のfwrite()をスキップする方法

<?php 
$file2 = fopen("out.txt", "w") or die("Unable to open file!"); 
$handle = fopen("plik.txt", "r"); 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     if (strpos($line, 'tak') === 0) { 
      echo 'found<br/>'; 
     } 
     else { 
      fwrite($file2, $line); 
     } 
    } 
    fclose($handle); 
    echo 'OK'; 
} 
else { 
    echo "can't read the file"; 
} 

?> 
+0

それはラインが "TAK" –

答えて

0

あなたが発生した回数をカウントするbooleaninteger変数を保つことによってそれを行うことができます。このように、

<?php 
$file2 = fopen("out.txt", "w") or die("Unable to open file!"); 
$handle = fopen("plik.txt", "r"); 
if ($handle) { 
    $stopWriteLines=false; 
    $max_line_skip=2; 
    // Taking above two variables for our logic. 

    while (($line = fgets($handle)) !== false) { 
     if($stopWriteLines) { 
      $max_line_skip--; 
     } 
     // Above condition check if we found tak in line then decrements the skip lines count. 

     if (strpos($line, 'tak') === 0) { 
      echo 'found<br/>'; 
      $stopWriteLines=true; // Setting Boolean variable to skip writing lines. 
     } 
     else { 
      if(!$stopWriteLines) { // will write only if Boolean variable is set to true. 
       fwrite($file2, $line); 
      } 
     } 

     if($max_line_skip==0) { 
      $stopWriteLines=false; 
     } 

     // Above condition will make Boolean variable false after skipping 'n' lines. 
    } 
    fclose($handle); 
    echo 'OK'; 
} 
else { 
    echo "can't read the file"; 
} 
?> 

尊重されたコードセクションの理解を深めるために、コードの説明を確認してください。

+0

これで始まるかどうかをチェックします最初の "tak"の後に行をスキップするだけです –

+0

if(strpos($ line、 'tak')=== 0){'whileループでこれを追加したので、これはすべての行で有効です。 –

+0

私はあなたのソリューションを試しましたが、それは私のためには機能しません。最初の "tak"の後の最初の2行をスキップするだけです。 –

1

私はfileforループ、file_put_contentsを使用するとうまくいくと思います。

$file2 = "out.txt"; 
//$file = file($file2) or die("Unable to open file!"); 
$file = array('asdf', 
'asdf', 
'asdf', 
'tak', 
'1', 
'2', 
'3', 
'4'); 
file_put_contents($file2, ''); // truncate file; 
for($i = 0; $i < count($file); $i++) { 
    $line = $file[$i]; 
    if (strpos($line, 'tak') === 0) { 
     echo 'found<br/>'; 
     $i = $i + 2; 
    } else { 
    //  file_put_contents($file2, $line, FILE_APPEND | LOCK_EX); 
     echo $line; 
    } 
    echo 'ok'; 
} 

デモ:https://eval.in/597694

出力(ちょっと汚いが、ポイントtakを取得し、1、および2はスキップ):

asdfokasdfokasdfokfound<br/>ok3ok4ok 
+0

私はあなたのtxtファイルで配列を置き換えましたが、それは仕事をしませんでした –

+0

'// $ file'のコメントを外して下の配列を削除しましたか? '$ file'は各行の配列でなければなりません。 – chris85

+0

さて、私はやったよ –

関連する問題