当前位置: 首页 > 面试题库 >

如何使用php替换文本文件中的特定行?

魏鸿哲
2023-03-14
问题内容

如何使用php替换特定行。我不知道行号。我要替换包含特定单词的行。


问题答案:

您可以在较小的文件上使用一种方法,该文件可以两次装入您的内存:

$data = file('myfile'); // reads an array of lines
function replace_a_line($data) {
   if (stristr($data, 'certain word')) {
     return "replaement line!\n";
   }
   return $data;
}
$data = array_map('replace_a_line',$data);
file_put_contents('myfile', implode('', $data));

快速说明,PHP> 5.3.0支持lambda函数,因此您可以删除命名的函数声明并将映射缩短为:

$data = array_map(function($data) {
  return stristr($data,'certain word') ? "replacement line\n" : $data;
}, $data);

从理论上讲,您可以使它成为单个(很难理解)的php语句:

file_put_contents('myfile', implode('', 
  array_map(function($data) {
    return stristr($data,'certain word') ? "replacement line\n" : $data;
  }, file('myfile'))
));

您应该对较大的文件使用另一种(较少占用内存的方法):

$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');

$replaced = false;

while (!feof($reading)) {
  $line = fgets($reading);
  if (stristr($line,'certain word')) {
    $line = "replacement line!\n";
    $replaced = true;
  }
  fputs($writing, $line);
}
fclose($reading); fclose($writing);
// might as well not overwrite the file if we didn't replace anything
if ($replaced) 
{
  rename('myfile.tmp', 'myfile');
} else {
  unlink('myfile.tmp');
}


 类似资料:
  • 问题内容: 我的Linux机器上有一个2GB的文本文件,我正尝试将其导入数据库。 我遇到的问题是,正在处理此rdf文件的脚本在一行上令人窒息: 我想替换用。我无法在所有行上进行搜索/替换,但是我有行号,因此我希望有一些简单的方法可以将一行替换为新文本。 有什么想法/建议吗? 问题答案:

  • 问题内容: 好的,所以我有这个yaml文件,我想替换一个字符串 与字符串 但是我不知道该怎么办。这是完整的Yaml文件 问题答案: 假设您使用的操作系统不错,并且您的YAML文档称为:

  • 问题内容: 我需要打开一个文本文件并替换一个字符串。我需要这个 到目前为止,这是我所拥有的,但是除了多余的空格外,我看不到文本文件中的任何更改。 我该怎么做? 问题答案: 这项工作:

  • 它是在Android上的,在加载到WebView之前需要修复html。 这可以在JAVA内部完成还是必须在WebView的JavaScript内部完成?

  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。

  • 我正在从文本文件中读取预订系统的座位数据,并将其写入ArrayList中。一个行将被放入一个可变的fileline中。文件行是从每个“,”中拆分出来的,并放入名为Components的数组中。然后将组件放入对象中。 txt文件示例 然后进入一个if语句,检查座位是否合适,如果合适,我想将false更改为true,并将乘客名添加为null,但只在合适的座位上。我想知道是否有任何方法可以覆盖文本文件中