在此文本文件的每一行的第一个空格后删除所有内容

时间:2013-06-02 23:57:42

标签: php file

在PHP中,如何编辑文本文件并保存它以便删除第一个空格后的所有内容?

换句话说,每条线只有第一个字?

例如,如果文本文件如下所示:

Adi NNP
Adia NNP
Adios NNP FW
Adios-Direct NNP
Adios-On NNP
Adios-Rena NNP
Adios-Trustful NNP
Adirondack NNP
Adirondacks NNPS
Adjoining VBG
Adjournment NN

执行脚本后,文本文件如下所示:

Adi
Adia
Adios
Adios-Direct
Adios-On
Adios-Rena
Adios-Trustful
Adirondack
Adirondacks
Adjoining
Adjournment

我将如何处理这个问题,就是打开文件,读取文件,然后取出每一行并将其存储在一个数组中。然后在没有任何东西的情最后,将已编辑的数组保存到新文件中。

有没有更好的方法呢?

除了最后两个任务之外,我所知道的上述方法中的所有操作都是如此。我会这样做:

$file = array();
$lines = file('file.txt');
foreach($lines as $line){
    array_push($file, $line);
}
// now travel through $file and replace everything after first space with nothing
// travel though $file again, but write each element as a new line in a .txt file

3 个答案:

答案 0 :(得分:1)

您可以使用explode()按行分隔行。然后你可以立即将字符串写回文件,不需要第二个循环:

$file = array();
$lines = file('file.txt');

$new_file = fopen('new.txt', 'w+');
foreach($lines as $line){
    $bits = explode(' ', $line);
    fwrite($new_file, $bits[0] . PHP_EOL);
}

fclose($new_file);

答案 1 :(得分:1)

您可以在同一行中执行此操作:只需将array_push($file, $line)替换为...

$file[] = strtok($line, ' ');

array_map

的帮助下,它可以写得更紧凑
$lines = array_map(function($line) {
  return strtok($line, ' ');
}, file('file.txt'));

...或者您可以立即将其写回,如@ hek2mgl answer。

所示

答案 2 :(得分:0)

您可以完全绕过数组,并使用简单的regular expression执行此操作:

// Read in contents into a variable
$data = file_get_contents('input.txt');

// Drop the space and everything after on each line
$data = preg_replace('/ .*$/m', '', $data);

// Dump contents to file   (change this to input.txt if you want to overwrite the file)
file_put_contents('output.txt', $data);