比较两个文本文件 - 并将差异保存到新文件

Posted

技术标签:

【中文标题】比较两个文本文件 - 并将差异保存到新文件【英文标题】:Comparing two text files - and save difference to new file 【发布时间】:2020-05-13 14:08:44 【问题描述】:

我目前正试图通过这个来迷惑我的头脑 - 所以场景是:

1. 从 FTP 下载 textFile1

2. 从 FTP 下载 textFile2

3. 从 PC 上的本地文件中读取 textFile1&2 中的数据并进行比较

4. 仅将差异(如整行)保存到 textFile 3

我尝试过对其进行 fs.readFile - 并比较 fileDiff (npm diff);但是我有点不确定如何处理,所以它只会将 1&2 之间的实际差异保存到第三个文本文件中。

将其视为“比较并保存”

希望有人对如何实现这一点有任何想法,这有点难以解释。


// 更新

代码 sn-p(或往下看):https://jsfiddle.net/menix/py3eqnfL/

const ServerLog = "ServerDM/TheIsle/Saved/Logs/TheIsle.log";
const LocalSaveOld = "TheIsleData/TheIsle.log";
const LocalSaveNew = "TheIsleData/TheIsleNew.log";

async function example() 
    const client = new ftp.Client();
    client.ftp.verbose = true;

    try 
        await client.access(
            host: config.ftpHost,
            port: config.ftpPort,
            user: config.ftpUser,
            password: config.ftpPassword,
            secure: config.ftpSecure,
        );
        await client.downloadTo(LocalSaveOld, ServerLog);

        if (fs.existsSync(LocalSaveOld)) 
            fs.readFile(LocalSaveOld, function (err, data1) 
                console.log(data1);
                fs.readFile(LocalSaveNew, function (err, data2) 
                    console.log(data2);
                    var difference = fileDiff.diffLines(data1, data2);
                    console.log(difference);
                );
            );

            await fs.rename(LocalSaveOld, LocalSaveNew, function (err) 
                console.log("old was copied to new");
                if (err) console.log("ERROR: " + err);
            );
        
     catch (error) 
        console.log("FTP ERROR");
        client.close();
    


这是我目前玩过的代码,很可能显然需要重新编码。

我的想法是首先它通过 FTP 将 ServerLog 文件下载到 PC(它在 PC 上将其保存为 LocalSaveOld) - 然后它应该在 5 分钟后再次重新下载 ServerLog ,另存为LocalSaveNew

然后我想将 LocalSaveOld 与 LocalSaveNew 进行比较 - 并将 5 分钟内的“新数据”保存到第三个文件中(这是我真正迷失的地方

我想出了如何从 FTP 下载 ServerLog,将其保存为 LocalSaveOld。

我想出了如何将 LocalSaveOld 重命名为 LocalSaveNew

我需要一种方法来“重新下载”和“比较”它每 5 分钟左右,以获取新数据.. 并将其保存到单独的文本文件或其他文件中;代码中缺少这一位(我们称之为 NewLogData

A Friend here has a working Python example; but obviously mine is done in javascript - I wanna achieve same result

【问题讨论】:

你做了什么?您应该发布您的代码并告诉我们出了什么问题 @Lety 更新线程 jsfiddle.net/menix/7jued8np 认为我正在下载一些东西。到目前为止它保存并检查新旧文件,现在我只需要一种方法来比较每个文件并将差异保存到新的文本文件中 【参考方案1】:
const string1 = fs.readFileSync(LocalSaveOld,  encoding: "utf8" );
const string2 = fs.readFileSync(LocalSaveNew,  encoding: "utf8" );
const diff = (diffMe, diffBy) => diffMe.split(diffBy).join("");
const finalString = diff(string2, string1);
fs.writeFile("./TheIsleData/diff.log", finalString, function (err) 
    if (err) return console.log(err);
    console.log("written");

是比较的答案 - 我现在已经完全正常工作了!

【讨论】:

第一次能够做到明天它说! ^^ 感谢您的提醒,不知道这是可能的。

以上是关于比较两个文本文件 - 并将差异保存到新文件的主要内容,如果未能解决你的问题,请参考以下文章

通过两个文本文件中的特定模式获取差异文件

python 有没有一个模块可以比较两个文本文件内容差异的?而且可以只输出差异的部分?

比较2个文本文件并输出差异[关闭]

在线文本差异对比

Python:读取文本文件并将其中列出的目录复制/粘贴到新目录

是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?