突出显示与前一行不同的列

时间:2011-09-16 09:09:45

标签: regex vim syntax-highlighting

我有文本文件,数字数据用行写成;存在散布的输入线(未知数)和残差线(应该最小化)。我正在研究迭代求解器如何处理各种情况的方法,并且想要突出残差线中的每个(空格分隔的)字段,该字段(文本上)与先前残差线中的相同字段不同(上面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,但我将失去自动折叠功能。

1 个答案:

答案 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);

?>

我没有测试过这段代码,但我认为它显示了如何在不钻研正则表达式的情况下获得解决方案