0

在 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
4

3 回答 3

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);
于 2013-06-03T00:00:50.980 回答
1

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

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

它可以在以下帮助下写得更紧凑array_map

$lines = array_map(function($line) {
  return strtok($line, ' ');
}, file('file.txt'));

...或者您可以立即将其写回,如@hek2mgl 答案所示。

于 2013-06-03T00:02:11.380 回答
0

您可以完全绕过数组并使用简单的正则表达式来执行此操作:

// 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);
于 2013-06-03T00:13:21.057 回答