问题标签 [diff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
181 浏览

mysql - MySQL 数据库的最佳更新方法

我已经阅读了类似问题的解决方案,但它们似乎都涉及脚本和额外的工具。我希望我的问题足够简单以避免这种情况。

所以用户上传下周数据的 csv。它被插入数据库,没问题。

一个小时后,他得到了每个人的反馈,并且必须做出相应的更新。他更新了 csv 并将其上传到数据库。

现在,我正在使用的系统检查该周的数据是否已经存在,如果存在,则从数据库中提取所有数据,脚本会找到差异并将它们发送出去,毕竟这样,旧数据的数据将被删除并用新数据替换。

显然,将其擦干净并重新输入数据要容易得多,但这不是最好的方法,尤其是在有大量更改或大量数据的情况下。但我必须知道为了发送警报做了哪些更改。但是我不想要事务日志,因为警报只需要发送一次,之后旧数据就没用了。

所以!

是否有一种聪明的方法可以将新数据与现有数据进行比较,仅获取已更改/删除/添加的行并进行这些更改?现在看来我可以进行更新,但是我不会就发生的变化得到任何回应...

谢谢!

快速编辑:

当前没有外键在使用。这很快就会改变,但不会有什么不同,因为外键只会指向数据影响的对象,因此不需要更改。就主键而言,这确实带来了一些困境:

有问题的数据是每个人的工作时间表。因此,每个班次都有一个密钥会很好(对于这个时间表的特定应用,而不是简单的输出)。但问题是,假设 user1 周一迟到了。迟到记录在一个单独的表中,并使用 shift 键与班次相关联。但是,如果在星期二需要对已经进行的一周进行一些更改,我担心要确保数据库中的所有条目已经发生(因此可能具有不应该发生的关联)将变得太困难被破坏)将在此过程中重新键入。不幸的是,它并不像只更新当前时间之后发生的所有事件那么简单,因为这会给上传的人增加工作量(从而使其不那么有市场)。基本上,他们在一个程序上制定时间表,将其导出为 CSV,然后将其上传到需要该数据的所有 Web 应用程序的网页上。因此,每次导出整个一周并上传它时,他们(并且对每个相关人员的压力都较小)执行相同的例程变得容易得多。

所以我最关心的是让上传脚本在两端尽可能智能。尝试查找更改不会变得臃肿,无论输入如何,它都可以找到更改,并且没有任何未更改的数据有被重新键入的风险。

这是一个相关的问题:

还有一个:

我真的很想知道这种数据通常是如何处理/接近的,而不是上面的具体答案。

再次谢谢你。

0 投票
1 回答
2565 浏览

php - 在 PHP 中应用差异

我正在使用 Text_Diff PEAR 包来区分短文本文档,其中 Text_Diff 对象是使用每个文档中以空格分隔的单词列表创建的。我希望将差异存储在数据库中,然后在再次加载文件时应用它。有没有一种简单的方法来应用这个差异,还是我需要编写一个函数来解析它?

0 投票
15 回答
2019 浏览

algorithm - 确定由多个用户编辑的文本的“所有者”

您可能已经注意到,我们现在在社区 Wiki 帖子上显示编辑摘要:

社区 wiki
220 次修订,48 位用户

我还想向“最拥有”页面上显示的最终内容的用户显示剩余文本的百分比:

社区 wiki
220 次修订,48 位用户
kronoz 87%

是的,可能有前 (n) 个“所有者”,但现在我想要前 1 个。

假设你有这个数据结构,一个用户/文本对列表,按发布时间顺序排列:

这些用户中谁最“拥有”最终文本?

我正在寻找一种合理的算法——它可以是一个近似值,它不必是完美的——来确定所有者。理想情况下以百分比分数表示。

请注意,我们需要考虑编辑、删除和插入,因此最终结果感觉合理且正确。您可以使用任何具有良好修订历史的 stackoverflow 帖子(不仅仅是重新标记,而是频繁的帖子正文更改)作为测试语料库。这是一个很好的版本,有来自 14 位不同作者的 15 次修订。谁是“主人”?

https://stackoverflow.com/revisions/327973/list

单击“查看源代码”以获取每个修订的原始文本。

我应该警告您,纯算法解决方案可能最终成为最长公共子串问题的一种形式。但正如我所提到的,如果它们运行良好,近似值和估计值也很好。

欢迎使用任何语言的解决方案,但我更喜欢以下解决方案

  1. 相当容易翻译成c#。
  2. 免于依赖。
  3. 将简单置于效率之前。

在 SO 上发表超过 25 次修订的帖子非常罕见。但它应该“感觉”准确,所以如果你仔细观察编辑,你会同意最终决定。我鼓励您在带有修订历史的堆栈溢出帖子上测试您的算法,看看您是否同意最终输出。


我现在已经部署了以下近似值,您可以在 Community Wiki 帖子上的每个保存的修订版本中看到它的实际效果

  • 对正文更改的每个修订版进行基于行的差异
  • 将每个修订的插入和删除行相加为“editcount”
  • 每个用户 ID 都会得到他们贡献的“editcount”的总和
  • 第一次修订作者获得 2x * "editcount" 作为初始分数,作为主要作者奖金
  • 确定最终所有权百分比:每个用户的编辑行总数除以所有修订中的编辑行总数

(对于常见的简单条件,例如 1 个修订版、只有 1 个作者等,还有一些保护条款。基于行的差异使得重新计算所有修订版的速度相当快;在 10 个修订版的典型情况下,它约为 50 毫秒。)

这在我的测试中效果很好。当你有几个人编辑的小 1 或 2 行帖子时,它确实会有点崩溃,但我认为这是不可避免的。接受乔尔·尼利(Joel Neely)的回答在精神上与我的想法最接近,并赞成其他所有似乎可行的事情。

0 投票
4 回答
13052 浏览

java - XML 差异和合并

我想我有一个相当独特的问题要解决。好吧,我无法使用谷歌找到足够的信息。就这样,

我在一个 Java EE SOA 应用程序上工作,该应用程序使用 Oracle XML DB 将 XML 文档存储为 XML。每当 XML 更改时,我都会增加版本并将以前的版本放入不同的表中。

现在的要求是,我应该将两个版本之间的差异存储为 XML,而不是整个 XML 文档。

  1. 有没有可以进行 XML 比较的 Java 库?(XMLUnit,...?)
  2. 是否有用于捕获 XML 差异的标准 XML 模式?
  3. 我可以使用什么转换技术将“差异”应用于 XML 以在版本之间来回切换?(XSLT、Groovy、....?)

我很感激你的时间。

0 投票
7 回答
5524 浏览

linux - 如何区分同一文件的两个部分?

我有一个包含两个相似但略有不同的部分的源文件。我想将这两个部分合并到一个子程序中,并带有一个处理细微差异的参数,但我需要确保我知道它们,所以我不会错过任何一个。
在这种情况下,我通常做的是将每个部分复制到一个单独的文件中,然后使用 tkdiff 或 vimdiff 来突出显示差异。有没有办法跳过中间文件,只区分同一个文件的两个部分?

0 投票
5 回答
67577 浏览

diff - 使用 diff 的输出创建补丁

我有这样的东西

我相信这是使用源树中的 diff 命令创建的。我想要的是使用该输出创建补丁,并将相同的更改应用于我的源代码树。

0 投票
2 回答
4124 浏览

svn - SVN 中的标准差异格式

SVN 中是否存在标准或普通差异格式或仅存在统一格式?

0 投票
13 回答
6968 浏览

algorithm - 如何判断两个网页是否相同?

有哪些技术可以很好地检测一个网页是否与另一个网页相同?

同样,我不是指 char-for-char 等效项(这很容易),而是足够强大,可以忽略页面上的当前日期/时间等内容。

例如,去 Yahoo! 新闻文章加载页面,10 分钟后在另一个浏览器中打开同一页面。霸菱重写,这些页面会有一些差异(时间戳,可能是广告之类的东西,可能是相关故事之类的东西),但人类可以看着两者并说它们是相同的。

注意我不是试图修复(或依赖)URL 规范化。即,找出 foo.html 和 foo.html?bar=bang 是相同的。

0 投票
4 回答
387 浏览

merge - 添加 diff 的两边以合并

我有两个 XML 文件。它们是相似的,但是有两个节点,其中一个文件只有一个。我想将两组这样的文档合并到一个文档中,首先取 A 面的节点,然后是 B 面的节点。

我不是 diff 工具的经验丰富的用户,我下载了 KDiff3 以从某个地方开始。任何人都可以让我走上正确的道路吗?

--EDIT--
查找差异工具是我可以自己管理的事情。
但是如何制作这些工具中的一个(不管是哪个)通过首先放入 file1 中的部分然后从 file2 中自动进行合并是我正在寻找的。这是一个相当大量的文件,所以我最好不要对合并过程进行任何干预。

0 投票
1 回答
187 浏览

diff - diff 中的选项以显示包含某个单词的行的差异

有没有办法使用diff仅在包含特定单词的行中显示差异?