Php 删除此文本文件每行第一个空格后的所有内容
在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
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
写回该(或其他)文件?顺便说一句,我已经检查了文件;你要怎么处理这些以非字母开头的行?