【问题标题】:Remove lines with specific pattern at the beginning of them删除开头带有特定图案的线条
【发布时间】:2012-07-29 06:22:40
【问题描述】:

我有一个大约 25,000 行的文本文件。大约 525kb。

有些行的开头有随机文本。 有些有很长的分号字符串。

其他一些只有三个分号,然后是一个空格和可选的更多文本在同一行。这些是我要删除的行。

这是一个示例......

   ;;; Updated Time 20120706122706
   ;;; Generic DEveloper Output

   ;;; Some Random Comments
   ;;; I got some more...
   ;;; Yet another uneeded line
   ;;; Thanks for using StackOverflow <http://stackoverflow.com>, or...
   ;;; Not.

   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Banana Production

   [Data_Release_Version]
   Version=12586
   Released=20120706122706

   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baseline Properties

   [BaseLineProperties]
   Comment=BaselineProperties

----- 等等。

一旦到达第一行 4 或更多 ;在线上,我需要文件的其余部分,因为没有“;;;”行。

尝试快速找到一些东西,而不是读取所有行并在它不匹配时将其写回 ";;; "。

文件是 ASCII(可能是 UTF-8)文本类型文件。

有什么想法吗?

感谢您的时间、帮助和知识。

【问题讨论】:

  • 你能试着再解释一下你想要什么。这不是很清楚。是否要删除超过 4 个分号的行?
  • 我想删除以“;;;”开头的行,而不是包含多于或少于 3 个分号然后是空格的行。一旦我连续击中 4 个或更多分号的行,我就可以停止删除行。我基本上想删除一个开头有随机行数的标题。

标签: php text


【解决方案1】:

我的建议是使用file_get_contents() 并将文件的内容作为字符串保存在变量中,然后在每个换行符处使用explode() 该字符串,然后在foreach 循环中,使用preg_match() 进行检查如果该行以 3 个分号和一个空格开头,如果没有,则将其放入另一个名为 $output 的数组中。在 foreach 之后,implode()$output 并添加一个换行符并使用file_put_contents() 将其打印到另一个文件中。希望这会有所帮助:-)

代码:

<?php
$string = file_get_contents($filename);
$array = explode("\n",$string);
foreach($array as $arr) {
    if(!(preg_match("^;;;\s",$arr))) {
        $output[] = $arr;
    }
}

$out = implode("\n",$output);
file_put_contents($path,$out);
?>

【讨论】:

    【解决方案2】:

    取决于.. 我会尝试加载到一个字符串中,然后用换行符做一个explode(),所以它在数组中,然后在没有strpos == 0 -AND- strpos 的任何东西上运行一个带有跳过的foreach! == false,如果不匹配可以继续跳到下一行。

    另一种选择,是解析,跳过,甚至使用fseek等。取决于很多不同的因素来确定什么是最快的。

    您可以稍后内爆,并重新添加换行符,然后推出文件,和/或使用换行符。取决于输出应该去哪里。

    【讨论】:

      【解决方案3】:

      我想你自己给出了答案:

      制作一个脚本,在循环(while)中逐行读取输入文件。如果满足两个条件,它会将每一行写入输出文件:1. 标志(“done”)为 FALSE 和 2. 该行不以“;;;”(不是空白)开头。这将删除那些以三个分号开头的行。一旦出现包含更多分号的行,您将标志设置为 TRUE,因此剩余的行将被复制而不被检查。

      【讨论】:

        猜你喜欢
        • 2018-01-16
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        相关资源
        最近更新 更多