我有文本文件,数字数据用行写成;存在散布的输入线(未知数)和残差线(应该最小化)。我正在研究迭代求解器如何处理各种情况的方法,并且想要突出残差线中的每个(空格分隔的)字段,该字段(文本上)与先前残差线中的相同字段不同(上面2行,更好的给出)通过regexp)。如果有帮助,我可以自由地装饰线条的起点。
这对于Vim和一些正则表达式魔法来说是否可行呢?
示例文件:
input 1 2 3 4 5 6
errors .2 .2 .3 .1 0 0
input 1 2.1 2.9 4 5 6 ## here, 2.1 and 2.9 should be highlighted
errors .21 .3 .44 .3 0 0
input 1 2 3 3.9 5.2 6 ## here, 2, 3, 3.9 and 5.2 should be highlighted
errors .2 .2 .34 .9 1 0
注意:我可以编写脚本来提取Python中的差异,但我想查看实际数据和更改。当它不能与Vim一起使用时,我将使用python处理它并输出突出显示的HTML,但我将失去自动折叠功能。
答案 0 :(得分:0)
我认为如果你使用数组而不是正则表达式进行比较,那可能会容易得多:
<?php
$lastRow=array()
$h=fopen('file','r');
while ($r=fgetcsv($h,0,' ')) // Retrieve a line into an array and split on spaces
{
if (count($lastRow)==0)
{
$lastRow=$r; // Store last line
}
$count++;
if ($r[0]=='input')
{
/*
* this won't find any differences the first run through
*/
$diffs=array_diff($lastRow,$r); // Anything that has changed from the last "input" line is now in $diffs
$lastRow=$r; // Only copy into $lastRow if it's an "input" line
}
/*
* Put your code to output line here with relevant CSS for highlighting
*/
}
fclose($h);
?>
我没有测试过这段代码,但我认为它显示了如何在不钻研正则表达式的情况下获得解决方案