在它们的开头删除具有特定图案的线条

时间:2012-07-29 06:22:41

标签: php text

我有一个大约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)文本类型文件。

有什么想法吗?

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

3 个答案:

答案 0 :(得分:4)

我建议使用file_get_contents()并将变量中的文件内容保存为字符串,然后在每个换行符处使用explode()字符串,然后在foreach循环中使用preg_match()使用$output检查行是否以3个分号和一个空格开头,如果它有剂量,则将其放在另一个名为implode()的数组中。在foreach之后,$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); ?> 将其打印在另一个文件中。希望这会有所帮助: - )

代码:

{{1}}

答案 1 :(得分:1)

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

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

您可以稍后进行内爆,然后重新添加换行符,然后推出文件,和/或使用换行符。取决于输出的位置。

答案 2 :(得分:0)

我认为你自己给出了答案:

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