2017-11-21 101 views
0

特定の文字列をtxtファイルから削除する必要があります。現在、コードはデータをファイルに直接ポストするために同様の方法で動作します。ただし、同じ方法で入力した同じデータを削除しようとすると、許可されません。現在の状態では、コードは文字列の削除のためにこのように見えます。 Php:テキストファイルから文字列を削除する

は、私たちは、構築済みのソート機能 またはstr_replaceまたは類似のコードのような利用機能を使用することはできません ました。ここ

文字列を除去するための現在のコードである:

 $blankReplace = ""; 
     $found = false; 
     $fileData = file($fileInput,FILE_IGNORE_NEW_LINES); 
     for($i = 0; ($i < count($fileData)) && != $found; $i ++) 
     { 
      if($fullNameAndEmail == $fileData[$i]) 
      { 
       $pos = $i; 
       $name = $fileData[$i]; 
       $found = true; 
      } 
     } 
     if($found == true) 
     { 
      // Exit path. Go to for($j = 0) path 
      unset($fileData[$pos]); 
      shuffle($fileData); 
     } 
     else 
     { 
      //Error Msg 
     } 
     $writeToFile = fopen($inputFile,'w+'); 
     for($j = 0;$j<count($fileData);$j++) 
     { 
       if(trim($fileData[$j]) != " ") 
       { 
        $rewrittenList = trim($fileData[$j])."\n"; 
        fwrite($writeToFile, $rewrittenList); 


       } 
     } 

コードがエラーを調査時にコードにT_IS_NOT_EQUALの誤差を出力します。データはread()から直接データとして取り込まれるので、うまくいくはずです。エラーは現在for($i = 0; ($i < count($fileData)) && != $found; $i ++)行を指していますが、コード内で同様のオカレンスも参照する可能性があります。

データはフォーマットで入力されている:

Matt Person [email protected] 
Matt Person [email protected] 

それがすること:

firstname lastname emailaddress 

は、私も言及した名前の複数のインスタンスは、私たちが持っていると言う発生した場合に対処できるようにする必要がありますこれに類似したケースでは、1つのインスタンスを削除する必要はありません。

お手数ですが、よろしくお願いいたします。

EDIT:

Example input: 
Matthew person [email protected] 
John holton [email protected] 
Person Name [email protected] 

(上記の形式で)、ユーザの意志入力人の名前と、それが人を除去することになります。フォームに彼らに入力を言う:

$fullName = "Matthew person"; 
$emailAddr = "[email protected]"; 
The output will edit the data to put the data into a single line again 
$fullNameAndEmail = $firstName." ".$lastName." ".$emailAddr; 

「マシューの人[email protected]」だから

を削除します。この例のコードの出力、テキストファイルに出力の出力は以下となります。

John holton [email protected] 
Person Name [email protected] 

編集2:コードはそれで私はあなたがそれをovercomplicatedていると思います現在の状態

<!doctype HTML> 
<html> 
<meta charset="utf-8"> 
<head> 
<title>Updating the guest book!</title> 
</head> 

<body> 
<?php 


$fileInput = "guestBook.txt"; 
$fileInputInData = file_get_contents($fileInput); // Gets data from file 
$testBool = file_exists($fileInput); 
$fullName = trim($_POST["fullName"]); 
$emailAddr = trim($_POST["emailAddr"]); 
$fileSize = filesize($fileInput); 

if(!empty($fullName) and !empty($emailAddr)) 
{ 
    if($testBool == 0) 
    { 
     echo "There was an issue with the file. Please have it checked.</br>"; 
    } 
    else 
    { 
     echo "Made it into else path for testBool </br>"; 
     if($fileSize > 0) 
     { #code for truth 
      echo "Made it into filesize check. Filesize: $fileSize </br>"; 


      $fullNameLen = strlen($fullName); 
      $emailAddrLen = strlen($emailAddr); 
      $fullNameArr = explode(" ", $fullName); 
      $firstName = trim($fullNameArr[0]); 
      $lastName = trim($fullNameArr[1]); 
      $fullNameToWrite =$firstName." ".$lastName; 
      $emailAddrCheck=substr_count($emailAddr, "@"); 
      if ($emailAddrCheck == 1) 
      { 
       echo "Email address check passed</br>"; 
       #email addr entered right path 
       $fullNameAndEmail =$fullNameToWrite." ".$emailAddr." has signed in.\n"; 
       $inputFile = "guestBook.txt"; 
       //$pos = strpos($writeToFile, $fullNameAndEmail); 
       //$writeToFileEx = explode("\n", $fileInputInData); 
       $blankReplace = ""; 
       $str = $fileInputInData; 
       $find = $fullNameAndEmail; 
       $arr=explode("\n", $str); 
       Foreach($arr as $key => &$line) 
       { 
        If($line == $find) 
        { 
         Unset($arr[$key]); 
         shuffle($arr); 
        } 
       } 
       $writeToFile = fopen($inputFile,'w+'); 
       $rewrittenList = trim($arr)."\n"; 
       fwrite($writeToFile, $rewrittenList); 
       fclose($inputFile); 
      } 
      else   { 
       echo "Email address check failed. Invalid email address entered. </br> 
         Line 55 occured.</br>"; 
       #email addr entered wrong message 
      } 
       //asort(array) sorts array low to high (ascending) 
       //arsort(array) sorts array high to low (descending) 

     } 
     else 
     { 
      echo "Did not make it into filesize check. Filesize: $fileSize. Line 63 occured </br>"; 
     } 
    } 
} 
else if (empty($fullName) or empty($emailAddr)) 
{ 
    echo "Error! Line 23: One of the inputs was left empty. Line 69 occured </br>"; 
} 
else 
{ 
    echo "Error! Line 23: Did not detect any values in either data area,</br>and program 
    did not go into first error. Line 73 occured </br>"; 
} 

?> 
<br> 
</body> 
</html> 
+0

開始します: '= $ found'あなたが言及' for'ループの中で、 '$ found'する必要があります!。現在は構文エラー – dan08

+0

です。入力と出力を表示します。あなたは、関数の入力と期待される出力を除いてすべてを説明しました。 '$ fullNameAndEmail'とは何ですか – Andreas

+0

あなたはstr_replaceを再発明しようとしていますか? https:// 3v4l。org/gpTEg#vhhvm-3185 – Andreas

答えて

0

です。
私はそれぞれの行をforeachし、それが一致するかどうかチェックします。
私は行の設定を解除します。

ループの後、新しい行にimplodeされ、文字列は通常の状態に戻りますが、$ findのものはありません。

$str = "Matt Person [email protected] 
John doe [email protected] 
Matt Person [email protected] 
Trump [email protected]"; 

$find = "Matt Person [email protected]"; 

$arr=explode("\n", $str); 

Foreach($arr as $key => &$line){ 

    If($line == $find){ 
     Unset($arr[$key]); 
    } 
} 
Echo implode("\n", $arr); 

https://3v4l.org/hmSr7

+0

結果の値をテストしようとすると、ファイルの内容が悲しいことに削除されています。検索するデータを表示するために、file_get_contentsから文字列を設定しようとしました。これは$ str = $ variableに置かれました。ここで$ variableは格納されています。 ($ fullNameAndEmail)に入力された完全な文字列を$ findに置くと、テキストファイルの内容全体が削除されます...これに対する解決策はありますか?後で$ arrの内容がファイルに戻されます。 –

+0

私が意味することを示す:$ str = $ fileInputInData; \t \t \t \t $ find = $ fullNameAndEmail; \t \t \t \t $ arr = explode( "\ n"、$ str); \t \t \t \tのForeach($ ARR =>&$行$キーなど) \t \t \t \t { \t \t \t \t($ライン== $を見つける。)もし設定解除 \t \t \t \t { \t \t \t \t ($ arr [$ key]); \t \t \t \tシャッフル($ arr); \t \t \t \t} \t \t \t \t} \t \t \t \t $ WRITETOFILE =のfopen($で、inputFile、 '+ W')。 \t \t \t \t $ rewrittenList = trim($ arr)。 "\ n"; \t \t \t \t fwrite($ writeToFile、$ rewrittenList); –

+0

あなたはまだ私たちに入力と期待される出力を示していません。それは私がそれを供給しているデータのために働く。あなたのデータが鉱山から遠く離れている場合は、**表示する必要があります。さもなければ私(私)はあなたを助けることができません – Andreas

関連する問題