感谢您抽出宝贵时间阅读本文,我将感谢每一个回复,无论内容的质量如何。 :)
使用php,我正在尝试创建一个脚本,根据行是以0还是负数开头,如果需要,将删除文本文件(.txt)中的多行。文件中的每一行总是以数字开头,我需要删除所有中性和/或负数。
我正在努力的主要部分是文本文件中的内容不是静态的(例如包含x个行/单词等)。事实上,它每隔5分钟自动更新几行。因此,我希望删除包含中性或负数的所有行。
文本文件遵循以下结构:
-29 aullah1
0 name
4 username
4 user
6 player
如果可能的话,我会删除第1行和第2行,因为它以中性/负数开头。在某些时候,有时可能有两个以上的中性/负数。
感谢所有的帮助,我期待着您的回复;谢谢。 :)如果我没有清楚地解释任何内容和/或您希望我更详细地解释,请回复。 :)
谢谢。
答案 0 :(得分:6)
示例:
$file = file("mytextfile.txt");
$newLines = array();
foreach ($file as $line)
if (preg_match("/^(-\d+|0)/", $line) === 0)
$newLines[] = chop($line);
$newFile = implode("\n", $newLines);
file_put_contents("mytextfile.txt", $newFile);
重要的是,chop()
新行字符不在行尾,这样你就不会得到空白空间。测试成功。
答案 1 :(得分:6)
我想这些线路上的东西,它是未经测试的。
$newContent = "";
$lines = explode("\n" , $content);
foreach($lines as $line){
$fChar = substr($line , 0 , 1);
if($fChar == "0" || $fChar == "-") continue;
else $newContent .= $line."\n";
}
答案 2 :(得分:6)
如果文件很大,最好逐行读取:
$fh_r = fopen("input.txt", "r"); // open file to read.
$fh_w = fopen("output.txt", "w"); // open file to write.
while (!feof($fh_r)) { // loop till lines are left in the input file.
$buffer = fgets($fh_r); // read input file line by line.
// if line begins with num other than 0 or -ve num write it.
if(!preg_match('/^(0|-\d+)\b/',$buffer)) {
fwrite($fh_w,$buffer);
}
}
fclose($fh_r);
fclose($fh_w);
注意:错误检查不包括在内。
答案 3 :(得分:6)
file_put_contents($newfile,
implode(
preg_grep('~^[1-9]~',
file($oldfile))));
php不是特别优雅,但仍然......
答案 4 :(得分:5)
将整行加载到变量中,然后检查第一个字母是 - 还是0。
$newContent = "";
$lines = explode("\n" , $content);
foreach($lines as $line){
$fChar = $line[0];
if(!($fChar == '0' || $fChar == '-'))
$newContent .= $line."\n";
}
我改变了malik的代码以获得更好的性能和质量。
答案 5 :(得分:1)
这是另一种方式:
class FileCleaner extends FilterIterator
{
public function __construct($srcFile)
{
parent::__construct(new ArrayIterator(file($srcFile)));
}
public function accept()
{
list($num) = explode(' ', parent::current(), 2);
return ($num > 0);
}
public function write($file)
{
file_put_contents($file, implode('', iterator_to_array($this)));
}
}
用法:
$filtered = new FileCleaner($src_file);
$filtered->write($new_file);
逻辑和方法可以添加到类中以用于其他内容,例如排序,查找最高编号,转换为理智的存储方法(如csv等)。当然还有错误检查。