[英]PHP Search for text in a file write to a location in that file, alphabetically
我正在尝试按字母顺序将一个固定大小的文本块写入其他固定大小的文本块列表中。
让您了解一下它的外观:
;Config generated on 2012-11-12 14:03:59
;Header1
exten => 01243573056,1,Answer()
exten => 01243573056,n,ResetCDR()
exten => 01243573056,n,Set(CDR(accountcode)=21)
exten => 01243573056,n,Set(CDR(userfield)=inbound)
exten => 01243573056,n,Set(MONITOR_FILENAME=Header1_${UNIQUEID})
exten => 01243573056,n,Set(CALLERID(name)=Header1)
exten => 01243573056,n,Queue(Header1)
exten => 01243573056,n,Hangup()
;Header2
exten => 01243573057,1,Goto(IVR,a,1)
exten => 01243573057,50,ResetCDR()
exten => 01243573057,n,Set(CDR(accountcode)=118)
exten => 01243573057,n,Set(CDR(userfield)=inbound)
exten => 01243573057,n,Set(MONITOR_FILENAME=Header2_${UNIQUEID})
exten => 01243573057,n,Set(CALLERID(name)=Header2)
exten => 01243573057,n,Queue(Header2)
exten => 01243573057,n,Hangup()
对此报价大加歉意,
因此它们都遵循标头之后的相同模板(编辑,大多数情况下都是这样做,Header2块是一个不好的例子),但文本文件的顶部和奇数和结尾都需要标记,因此必须在该位置他们配置的程序。
但是,使用此示例,我需要找到Header1的块结束于何处,Header2的块开始于何处,然后在Header1的块之后插入Header3的块,以使它们最终成为字母顺序。
我当时在考虑使用fseek()
,但是它不会按我所看到的文本进行搜索。
任何帮助,将不胜感激。
您粘贴的文件没有以固定大小注册。
例如:
exten => 01243573056,n,Set(CDR(accountcode)=21) // in Header1
exten => 01243573057,n,Set(CDR(accountcode)=118) // in Header2: it has 1 byte more
您必须将多个字节传递给fseek函数,以避免读取它们。 使用此结构,您必须仔细阅读文件以搜索; Header * X *,直到找到它为止。
如果使用填充来固定大小,则在查找时可以使用n * sizeof(register)。
您可以逐行读取它,例如,如果行以“ [”开头,则记录哈希中的行位置。
通过这种方式,它可以组织在freepbx.org核心中,您可以阅读它以获得更多有关解析的想法。
但是星号的正确解决方案是使用gosub或宏,仅存储参数而不要一次又一次地写入相同的拨号计划。
您可以编写一个简单的Tokenizer / Parser并读取每个char或使用file解析行。
$lines = file('extensions.conf');
foreach ($lines as $num => $line) {
// simple parse with compare or strpos
if (trim($line) == ';Header2') {
echo "Match at Line #{$num}: " . $line . "\n";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.