Удалите пустые строки из TXT-файла, сохраняя возврат каретки

Я боюсь, что этот вопрос не будет слишком популярным и, возможно, будет отклонен, но я искал и искал на этом сайте (и другие тоже), и я не могу найти решение.

У меня есть текстовый файл, скажем, с таким содержанием:

Мне нужно удалить пустые строки, но сохранить существующие возвраты каретки, как это:

Код, который я использую:

if ($file = fopen("file.txt", "r")) {
    while(!feof($file)) {
        $line = fgets($file);
        echo str_replace("\r\n","",$line)
    }
    fclose($file);
}

Как указано выше, я пытался использовать такие функции, как str_replace, preg_replace и \r\n или \n\n и т. Д. В качестве символов для замены, но со всеми из них я получаю такой результат:

Пустая строка удаляется по желанию, но удаляются и возврат каретки, что в моем случае запрещено.

Так что мне интересно, если кто-нибудь может предложить способ получить мою цель:) Спасибо.

3 ответа

Обязательно должны быть дубликаты для замены, но просто прочитайте в массив и пропустите пустые строки:

$lines = file("file.txt", FILE_SKIP_EMPTY_LINES):

Затем зациклите массив echo линии или implode() чтобы вернуть его обратно в строку.

Мы можем удалить пустые строки и пробелы. Из случайного текстового файла. Он автоматически удалит пустые строки и пробелы, просто добавьте местоположение файла и распечатайте его.

Используйте этот код

          __DIR__ . "/uploads/" . $randomFile;
    $file_handle = fopen('uploads/' . $randomFile, 'r');
    // $file_handle2 = preg_replace('/^[ \t]*[\r\n]+/m', '', $randomFile);
    function get_all_lines($file_handle)
    {
      while (!feof($file_handle)) {
        yield fgets($file_handle);
      }
    }
    $count = 0;
    foreach (get_all_lines($file_handle) as $line) {
      $line = implode("\n", array_filter(explode("\n", $line)));
      $newLine = trim($line);
      $tempData = nl2br($line);
      $tempData = explode("<br />", $tempData);
      foreach ($tempData as $line) {
        if (trim($line) != '') {
          //  echo $line."<br />";
          echo (' <li>' . $line . '</li>');
        }
      }
    }
    fclose($file_handle);

@Abracadaver @nogad @GCRdev

Я пробовал твои методы, но у меня не получилось. Я наконец нашел способ (спасибо /questions/15261965/zamenit-neskolko-simvolov-novoj-stroki-tabulyatsii-probela/15261972#15261972), который я позволю здесь, если это будет полезно для кого-то:

$file = fopen("file.txt","r");
while($line = fgets($file)){

    $tempData = nl2br($line);
    $tempData = explode("<br />",$tempData);

    foreach ($tempData as $val) {
       if(trim($val) != '')
       {
          echo $val."<br />";
       }
    }
}
fclose($file);
Другие вопросы по тегам