Удалить строку из строки в текстовом файле - PullRequest
3 голосов
/ 21 апреля 2020

В настоящее время у меня есть код, который отображает данные из текстового файла и рандомизирует их после преобразования в массив.

$array = explode("\n", file_get_contents('test.txt'));
$rand_keys = array_rand($array, 2);

Я пытаюсь сделать так, чтобы после этого случайное значение

$search = $array[$rand_keys[0]];

Мы можем сохранить это в другом файле txt, таком как completed.txt, и удалить случайный сегмент из нашего предыдущего файла txt. Вот подход, который я попробовал, и, конечно, не сработал.

$a = 'test.txt'; 
$b = file_get_contents('test.txt'); 
$c = str_replace($search, '', $b); 
file_put_contents($a, $c); 

Затем, чтобы восстановить во вторичный файл, я возился с чем-то вроде этого.

$result = '';
foreach($lines as $line) {
    if(stripos($line, $search) === false) {
        $result .= $search;
    }
}
file_put_contents('completed.txt', $result);

Это на самом деле, кажется, работает до некоторой степени, однако, когда я смотрю на файл completed.txt, все содержимое ТОЧНО одинаково, и в test.txt

остается куча пробелов

1 Ответ

2 голосов
/ 21 апреля 2020

Есть несколько лучших способов сделать это (ИМХО), но в данный момент вы просто удаляете фактическую строку без символа новой строки. Вы также можете обнаружить, что он заменит другие строки, поскольку он просто заменяет текст без какого-либо представления о содержимом.

Но вы, вероятно, исправите свой код с добавлением замены новой строки ...

$c = str_replace($search."\n", '', $b); 

Альтернативный способ сделать это ...

$fileName = 'test.txt';
$fileComplete = "completed.csv";

// Read file into an array
$lines = file($fileName, FILE_IGNORE_NEW_LINES);
// Pick a line
$randomLineKey = array_rand($lines);
// Get the text of that line
$randomLine = $lines[$randomLineKey];
// Remove the line
unset($lines[$randomLineKey]);
// write out new file
file_put_contents($fileName, implode(PHP_EOL, $lines));

// Add chosen line to completed file
file_put_contents($fileComplete, $randomLine.PHP_EOL, FILE_APPEND);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...