1

テキストファイル内の特定の変数を削除する方法はありますか?次の内容のテキストファイルをxyz.txtと呼びましょう。

sdasd
dasdasda
sadasd

次に、ファイルのコンテンツを。でロードしますfile_get_contents。削除する変数をユーザーが決定できるようにします。彼が選択したとしましょうsdasd。テキストファイルから行を削除したい場合、何を使用する必要がsdasdありますか?ここで役立つものは見つかりませんでした:PHP手動ファイルシステム

txtfileの内容をロードする方法は次のとおりです。

$handle = @fopen("xyz.txt", "r");
        echo ('<table class="table table-bordered table-striped">');
      echo '<thead>';
      echo'<tr>';
        echo'<th>Auswahl</th>';
        echo'<th>Admin</th>';
        echo'</tr>';
        echo'</thead>';
        echo ('<tbody>');
        echo("<tr>");
        while (!feof($handle)) // Loop til end of file.
        {
        $buffer = fgets($handle, 4096);
        // Read a line.
        list($a,$b,$c)=explode(" ",$buffer);
        //Separate string by the means of |
        echo '<td><form name="Lager" method="submit" action="admins_verwalten.php"><input type="radio" name="Admin" value="'.$a.$b.$c.'"><br></td>';
        echo('<td>'.$a.$b.$c."</td>");
        echo("</tr>");
        }
        echo ('</tbody>');
        echo ('</table>');
        echo '<button type="submit" class="btn btn-primary"></i>Admin delete</button></label></form>';
4

5 に答える 5

0

おやおや、あなたのアプローチには多くの間違いがあります。どこから始めればいいのかさえわかりません。

とにかくやってみます。まず、ビューをまっすぐにしましょう。

<?php
    // Read the contents into an array without newlines
    $content = file('xyz.txt', FILE_IGNORE_NEW_LINES);
?>
<!-- A single form is enough, we don't want a gazillion forms!!! -->
<form name="Lager" method="POST" action="admins_verwalten.php">
<table class="table table-bordered table-striped">
    <thead>
        <tr>
            <th>Auswahl</th>
            <th>Admin</th>
        </tr>
    </thead>
    <tbody>
    <?php
        for ( $i=0; $i<$content.length; $i++ ) {
            // We don't need the line itself as the input's value,
            // line number will suffice
            // Moreover we will allow multiple lines to be deleted (that's
            // what the >> name="Admin[]" << is for
            print sprintf(
                '<tr>
                     <td><input type="radio" name="Admin[]" value="%d"></td>
                     <td>%s</td>
                 </tr>',
                $i,
                $content[$i]
            );
        }
    ?>
    </tbody>
</table>
<button type="submit" class="btn btn-primary" value="Admin delete"/>
</form>

次に、フォーム送信の処理を行います。

// This will give us an array with numbers of lines to be deleted
$lines = isset($_POST['Admin']) ?
             $_POST['Admin'] : false;

if ( !empty($lines) ) {
    $content = file('xyz.txt');

    foreach ( $lines as $line ) {
        // Delete the lines chosen by the client
        unset($content[$line]);
    }

    // Write back the remaining content
    file_put_contents('xyz.txt', $content);
}
于 2012-11-15T10:46:02.620 に答える
0

ユーザーの操作を容易にするために、ファイルをメモリに読み込む必要があります。ユーザーが削除する変数を選択したら、削除する項目なしでファイルを書き戻します。

于 2012-11-15T10:13:33.220 に答える
0

これが私がそれをする方法です:

1. Read contents from the file into a variable
2. use the explode with a linefeed as the delimiter to put the lines of the text file into an array.
3. take user input.
4 for each element in the array see if user input matches the value.
5. if matches then delete that element in the array.
6. recreate the text file from the array and write to disk. 
于 2012-11-15T10:16:47.317 に答える
0

すべての行を配列に入れるには:

$arr = file('textfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

文字列を取り出す:

$to_remove = 'asdf';
$arr = array_filter($arr, function($item) use ($to_remove) {
    return $item != $to_remove;
});

ファイルを書き戻すには:

file_put_contents('textfile.txt', join("\n", $arr));

編集

フィルタリングが機能しない理由をデバッグするのに役立ちます。たとえば、これは機能します。

$arr = array('HAUGMA1', 'sdasd', 'dasdasda', 'sadasd');

$to_remove = 'sdasd';
$arr = array_filter($arr, function($item) use ($to_remove) {
        return $item != $to_remove;
});

print_r($arr);
于 2012-11-15T10:20:43.810 に答える
0

このようなものを使用できます。

$source = "xyz.txt";
$raw = file_get_contents($source) or die("Cannot read file");
$wordlist = "sdasd";
$raw = preg_replace("/($wordlist)/ie", "", $raw);
file_put_contents($source, $raw);

複数の行を削除する場合は、次のように変更します

$wordlist = "sdasd";

$wordlist = "sdasd|abcd"; //this will remove abcd also if found.
于 2012-11-15T10:32:47.700 に答える