使用 php 删除文件中包含特定单词的行之前的所有行

Delete all lines before a line that included specific word in a file by using php

我需要 php 中的一个简单代码,它可以删除包含特定单词的行之前的所有行,例如,这是 foo.txt 的内容:

.

.

eroigjeoj

dvjdofgj

dsfdsft

reytyjkjm

.

.

[DATA]

1,2,4

3,4,5

.

.

.

我想删除包含“[DATA]”的行之前的所有行,并将该行也删除。 结果是 foo.txt 内容如下:

1,2,4

3,4,5

.

.

.

这是一种方法,可能不是最有效的方法。

  • 创建一个新的文本文件 (text2)。

    $text2 = fopen("text2", "w");
    
  • 将布尔值初始化为 false。

    $hitWord = false;
    
  • 逐行阅读原始文本文件 (text1),直到您点击 字符串 '[DATA]',将后续行添加到 text2

    $handle = fopen("text1.txt", "r");
    if ($handle) {
       while (($line = fgets($handle)) !== false) {
           if($hitWord){
               fwrite($text2, $line . "\n");
           }else{
               if(strpos($line,'[DATA]') !== false){
                   $hitWord = true;
               }
           }
       }
       fclose($handle);
    } else {
    // error opening the file.
    } 
    
  • Delete text1 using unlink($text1) // 你需要路径

  • 使用 rename() 函数将 text2 重命名为 text1。

交替

您可以使用与上述相同的方法。除了不编辑一个新的文本文件,而是编辑一个新的字符串,然后在程序末尾用这个字符串替换 text1 中的所有行。

这将使您不必 create/delete/edit 新文件。确保正确使用新行