如何使用PHP删除文本文件中的多行(串行)?
我有这样的文本文件如何使用PHP删除文本文件中的多行(串行)?,php,Php,我有这样的文本文件 ;[Teca-E1] context=TRK_E0_TDM1 channel=17-31 context=TRK3 group=0 channel=1-15 group=3 ;cgoi=15v15r ;status= ;[Teca-E1] context=TRK_E1_TDM2 channel=48-62 context=TRK3 group=1 channel=32-46 group=3 ;cgoi=15v15r ;status= ;[Teca-E1] context=TR
;[Teca-E1]
context=TRK_E0_TDM1
channel=17-31
context=TRK3
group=0
channel=1-15
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E1_TDM2
channel=48-62
context=TRK3
group=1
channel=32-46
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E2_TDM3
channel=79-93
context=TRK3
group=2
channel=63-77
group=3
;cgoi=15v15r
;status=
我想删除以这行“context=TRK\u E0\u TDM”开头的8行
我想要的结果是:
;[Teca-E1]
context=TRK_E1_TDM2
channel=48-62
context=TRK3
group=1
channel=32-46
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E2_TDM3
channel=79-93
context=TRK3
group=2
channel=63-77
group=3
;cgoi=15v15r
;status=
为了便于拍摄,我在下面有一张图片:
我写的PHP代码,它可以删除特定的行,但我不知道如何删除特定的组
这意味着:
- 我想删除组1并保留组2和3
- 或者我想删除组2并保留组1和组3
- 或者我想删除组3并保留组1和组2
<?php
$f = "trunk_e1.txt";
$term = "context=TRK_E0_TDM";
$arr = file($f);
foreach ($arr as $key=> $line) {
//removing the line
if(stristr($line,$term)!== false){
unset($arr[$key]);
break;
}
}
//reindexing array
$arr = array_values($arr);
//writing to file
file_put_contents($f, implode($arr));
?>
带有
preg\u replace
功能的简短解决方案:
$data = file_get_contents('trunk_e1.txt');
$result = preg_replace('/^.*context=TRK_E0_TDM.*(?=;\[Teca\-E1\]\s*context=TRK_E1_TDM2)/s', '', $data);
file_put_contents('trunk_e1.txt', $result);
最终
trunk_e1.txt
内容:
;[Teca-E1]
context=TRK_E1_TDM2
channel=48-62
context=TRK3
group=1
channel=32-46
group=3
;cgoi=15v15r
;status=
;[Teca-E1]
context=TRK_E2_TDM3
channel=79-93
context=TRK3
group=2
channel=63-77
group=3
;cgoi=15v15r
;status=
奖金动态删除扩展解决方案:
$data = file_get_contents('empty.txt');
$group_id = 1; // from 0 to ...
$pat = '/^(.*);\[Teca\-E1\]\s*context=TRK_E'. $group_id. '_TDM.*?(?=;\[Teca\-E1\]\s*context=TRK_|$)/s';
$result = preg_replace($pat, '$1', $data);
file_put_contents('empty.txt', $result);
有几种方法可以做到这一点,比如将第一个有效行复制到一个新数组中并保存,找到所需的行和索引,并对数组进行切片,等等,但我有一个问题。如何删除;[Teca-E1]上下文=TRK_E1_TDM1…….--->;状态=确定后;[Teca-E1]上下文=TRK_E0_TDM???@NguyễnTrầNthanl–m,如果您有新的条件,您应该将其添加到您的问题中。当它完成时,让我知道它工作了,我不能删除组1并保留组2和组3,但我不能删除组2并保留组1和组3。或者我无法删除组3并保留组1和2:(我再次编辑了我的问题,我认为我的问题对你来说不清楚。你能读一下并帮助我:D@NguyễnTrầNthanl–m,我的解决方案给出了预期的结果。你想从我这里得到什么?