Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除此文本文件每行第一个空格后的所有内容_Php_File - Fatal编程技术网

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

Php 删除此文本文件每行第一个空格后的所有内容,php,file,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

在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
执行脚本后,文本文件如下所示:

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
您可以使用
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);

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

$file[] = strtok($line, ' ');
借助于
array\u map
,它可以编写得更加紧凑:

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

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

您可以完全绕过阵列,并通过一个简单的:


我只是厌倦了这段代码,它并没有编写一个名为new.txt的新文件。我不知道为什么。逻辑/代码似乎很可靠。下面是我正在运行的代码:您确定您在该文件夹中具有写入权限吗?将
display\u errors
设置为on并显示错误消息本身。500只是一个通用的错误代码。我得到一个PHP解析错误:语法错误,意外的T_函数,在edit.PHP的第7行,这里是edit.PHP的内容:所以您使用的是PHP5.2。。。(叹气)。好的,您仍然可以使用
array\u map
-只需将它使用的函数的定义移到外部(如图所示)。哦,对不起。我以为我跑的是5.3。我现在正在运行您的粘贴箱中的内容,没有收到任何错误,但文件也没有更改。您过去的bin中的内容和文本文件位于同一目录中。您是否将
$lines
写回该(或其他)文件?顺便说一句,我已经检查了文件;你要怎么处理这些以非字母开头的行?