6

我有一个文本文件,其中有一些空行。意思是线条上什么都没有,只是占用空间。

它看起来像这样:

The

quick
brown

fox jumped over
the

lazy dog

我需要它看起来像这样:

The
quick
brown
fox jumped over
the
lazy dog

如何删除这些空白行并仅获取包含内容的行并将它们写入新文件?

这是我知道该怎么做:

$file = fopen('newFile.txt', 'w');
$lines = fopen('tagged.txt');
foreach($lines as $line){
    /* check contents of $line. If it is nothing or just a \n then ignore it.
    else, then write it using fwrite($file, $line."\n");*/
}
4

7 回答 7

11

如果文件不是太大:

file_put_contents('newFile.txt',
                  implode('', file('tagged.txt', FILE_SKIP_EMPTY_LINES)));
于 2013-06-16T20:24:54.460 回答
4
file_put_contents('newFile.txt',
    preg_replace(
        '~[\r\n]+~',
        "\r\n",
        trim(file_get_contents('tagged.txt'))
    )
);

我喜欢\r\n:)

于 2013-06-16T20:47:13.850 回答
3

这是一个基于 foreach 的解决方案,仅过滤掉空行(不写入文件):

$lines = file('in.txt');
foreach ($lines as $k => $v) {
    if (!trim($v))
        unset($lines[$k]);
}
于 2013-06-16T20:25:42.627 回答
1
file_put_contents(
  "new_file.txt",
  implode(
    "", 
    array_filter(
      file("old_file.txt")
    ))
);

此代码首先将文件读取到数组 ( file()),过滤掉空元素 ( array_filter),然后将它们写入新文件。内爆分隔符是空的,因为file将字符留在\n每行的末尾。

于 2013-06-16T20:21:28.970 回答
1

您可以一次性完成所有操作:

file_put_contents('newFile.txt',
    preg_replace(
        '/\R+/',
        "\n",
        file_get_contents('tagged.txt')
    )
);
于 2013-06-16T20:24:29.867 回答
0

尝试使用 strpos。搜索\n。如果返回值为 0,则取消设置行

于 2013-06-16T20:20:21.713 回答
0
foreach($lines as $line) {
    if ($line!=='') $file.write($line);
}
于 2013-06-16T20:19:14.417 回答