文件比较脚本的逻辑

时间:2013-10-04 19:49:55

标签: javascript algorithm comparison logic versioning

我试图在Javascript中构建一个文件比较脚本,它采用两个版本的文件并输出类似Github的内容,显示添加和删除。我虽然遇到了算法逻辑方面的问题。这是迄今为止我的流程的伪代码:

var j = 0;
// check current file line by line
for(i=0; i < currentFileArr.length; i++){

    // see if the current line is different
    if(currentFileArr[i] !== previousFileArr[j]){

        if(previousFile.contains(currentFileArr[i])){
            // line is a deletion. find next line that wasn't deleted
            while(currentFileArr[i] !== previousFileArr[j]){
                j++;
            }
        } else {
            // line is an addition
        }
    } else { // lines are the same
        j++;
    }
}

主要问题是不是唯一的行。就像刚刚用大括号的新线条或线条一样。

1 个答案:

答案 0 :(得分:1)

您需要将文件中的每个唯一行视为元数据,即某些扩展字母表的“字符”。通过这种方式,您的文件都将变为“metachars字符串”。

最有效的方法 - 创建哈希表,包含唯一字符串,并使用表中的索引作为元搜索。

此后,您可以搜索最少的编辑顺序 Levenshtein算法在这些字符串之间:

http://www.let.rug.nl/kleiweg/lev/levenshtein.html

http://en.wikipedia.org/wiki/Levenshtein_distance

http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance