問題タブ [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.
mysql - MySQL DB の最適な更新方法
同様の問題の解決策を読みましたが、それらはすべてスクリプトと追加のツールを必要とするようです。私の問題がそれを避けるのに十分単純であることを願っています。
そのため、ユーザーは来週のデータの csv をアップロードします。問題なくDBに挿入されます。
しかし
1 時間後、彼は全員からフィードバックを受け取り、それに応じて更新を行う必要があります。彼は csv を更新し、それを DB にアップロードします。
現在、私が使用しているシステムは、その週のデータがすでに存在するかどうかを確認し、存在する場合は、DB からすべてのデータを取得し、スクリプトが違いを見つけて送信します。これにより、古いデータが削除され、新しいデータに置き換えられます。
明らかに、消去してデータを再入力する方がはるかに簡単ですが、特に変更が多い場合や大量のデータがある場合は、最善の方法ではありません。しかし、アラートを送信するためにどのような変更が行われたかを知る必要があります。しかし、トランザクション ログは必要ありません。アラートを送信する必要があるのは 1 回だけで、その後は古いデータは役に立たないからです。
そう!
新しいデータを既存のデータと比較し、変更/削除/追加された行のみを取得し、それらの変更を行うスマートな方法はありますか? 今のところ、更新はできるようですが、何が変わったのかについて何の反応も得られません...
ありがとう!
クイック編集:
現在使用中の外部キーはありません。これはすぐに変更されますが、外部キーはデータの影響を示すだけであり、変更する必要がないため、違いはありません。主キーに関する限り、これには少しジレンマがあります。
問題のデータは、全員の勤務スケジュールです。したがって、各シフトにキーがあると便利です (単純な出力を超えたこのスケジュールの特定のアプリケーションの場合)。しかし問題は、user1 が月曜日に遅刻したとしましょう。遅刻は別のテーブルに記録され、シフト キーを使用してシフトに関連付けられます。しかし、火曜日にすでに進行中の週に何らかの変更を加える必要がある場合、DB 内のすべてのエントリが既に発生していることを保証することが難しくなりすぎるのではないかと心配しています壊れる)プロセスで再キー化されます。残念ながら、現在の時間以降に発生したすべてのイベントを更新するだけでは簡単ではありません。これは、アップロードを行う人に作業が追加される (したがって、市場価値が低くなる) ためです。基本的、1 つのプログラムでスケジュールを作成し、それを CSV にエクスポートしてから、そのデータを必要とするすべての Web アプリケーションの Web ページにアップロードします。そのため、週全体をエクスポートしてアップロードするたびに同じルーチンを実行する方が、はるかに簡単です (関係者全員のストレスも少なくなります)。
したがって、私の最大の関心事は、アップロード スクリプトを両端でできるだけスマートにすることです。変更を見つけようとして肥大化することはありません。入力に関係なく変更を見つけることができ、変更されていないデータはキーが変更されるリスクはありません。
関連する質問は次のとおりです。
そしてもう一つ:
上記に対する具体的な回答よりも、この種のデータが通常どのように処理/アプローチされるかを知りたいと思っています。
再びありがとう。
php - PHP で Diff を適用する
私は、Text_Diff PEAR パッケージを使用して短いテキスト ドキュメントと比較しています。Text_Diff オブジェクトは、各ドキュメント内の単語をスペースで区切ったリストで作成されます。差分をデータベースに保存し、ファイルが再度読み込まれたときに適用することを望んでいました。この差分を適用する簡単な方法はありますか、それとも解析する関数を書く必要がありますか?
algorithm - 複数のユーザーが編集したテキストの「所有者」を特定する
お気づきかもしれませんが、コミュニティ Wiki の投稿に編集の概要が表示されるようになりました。
コミュニティ wiki
220 リビジョン、48 ユーザー
また、ページに表示される最終的なコンテンツを「最も所有している」ユーザーを、残りのテキストのパーセンテージとして表示したいと思います。
コミュニティ wiki
220 リビジョン、48 ユーザー
kronoz 87%
はい、上位 (n) 人の「所有者」がいる可能性がありますが、今のところ、上位 1 人が必要です。
このデータ構造があると仮定します。これは、投稿の時点で時系列に並べられたユーザー/テキストのペアのリストです。
これらのユーザーのうち、最終的なテキストを最も「所有」しているのは誰ですか?
所有者を決定するための合理的なアルゴリズムを探しています。近似値である可能性があり、完全である必要はありません。パーセンテージ スコアで表すのが理想的です。
編集、削除、および挿入を考慮に入れる必要があることに注意してください。そうすれば、最終結果は合理的で正しいと感じられます。適切なリビジョン履歴 (再タグ付けだけでなく、頻繁な投稿本文の変更) を持つスタックオーバーフロー投稿をテスト コーパスとして使用できます。これは良いもので、14 人の異なる著者による 15 のリビジョンがあります。「所有者」は誰ですか?
https://stackoverflow.com/revisions/327973/list
「ソースを表示」をクリックして、各リビジョンの生のテキストを取得します。
純粋なアルゴリズムによる解決策が、最終的には最長共通部分文字列問題の形式になる可能性があることを警告しておく必要があります。しかし、前述したように、近似値と推定値も、うまく機能する場合は問題ありません。
どの言語での解決策も歓迎しますが、私は次のような解決策を好みます
- C# に変換するのはかなり簡単です。
- 依存関係がありません。
- 効率よりもシンプルさを優先してください。
SO に関する投稿に 25 回以上のリビジョンがあることは非常にまれです。ただし、正確に「感じられる」必要があるため、編集内容を目で見て確認した場合は、最終決定に同意することになります. リビジョン履歴を含むスタック オーバーフローの投稿でアルゴリズムをテストし、最終的な出力に同意するかどうかを確認することをお勧めします。
私は現在、次の概算を展開しています。これは、コミュニティ Wiki の投稿で新しく保存されたすべてのリビジョンの動作を確認できます。
- 本文が変更されたすべてのリビジョンの行ベースの差分を実行します
- 各リビジョンの挿入行と削除行を「editcount」として合計します
- 各ユーザー ID は、貢献した「editcount」の合計を取得します
- 最初のリビジョンの著者は、一次著者ボーナスとして、初期スコアとして 2x * "editcount" を取得します
- 最終的な所有権のパーセンテージを決定する: 各ユーザーの編集された行数の合計を、すべてのリビジョンの編集された行の合計数で割った値
(リビジョンが 1 つ、作成者が 1 人のみなど、一般的な単純な条件に対するいくつかのガード句もあります。行ベースの diff により、すべてのリビジョンの再計算がかなり高速になります。たとえば、10 リビジョンの典型的なケースでは、約 50 ミリ秒です。)
これは、私のテストではかなりうまく機能します。数人が編集する 1 ~ 2 行の小さな投稿の場合は少し崩れますが、それは仕方のないことだと思います。ジョエル・ニーリーの答えを、私が行ったものに精神的に最も近いものとして受け入れ、実行可能と思われる他のすべてを支持しました。
java - XML 差分とマージ
解決すべきかなりユニークな問題があると思います。まあ、私はGoogleを使って十分な情報を見つけることができません。ということで、
私は、Oracle XML DB を使用して XML ドキュメントを XML として格納する Java EE SOA アプリケーションに取り組んでいます。XML が変更されるたびに、バージョンをインクリメントし、以前のバージョンを別のテーブルにスローします。
現在の要件は、XML ドキュメント全体ではなく、2 つのバージョンの違いを XML として保存する必要があるということです。
- XML 比較を実行できる Java ライブラリはありますか? (XMLユニット、...?)
- XML の違いをキャプチャするための標準 XML スキーマはありますか?
- 「違い」を XML に適用してバージョン間を行き来するには、どの変換テクノロジを使用できますか? (XSLT、Groovy、.... ?)
お時間をいただきありがとうございます。
linux - 同じファイルの 2 つのセクションを比較するにはどうすればよいですか?
2 つの類似しているが微妙に異なるセクションを含むソース ファイルがあります。微妙な違いを処理するパラメーターを使用して、2 つのセクションを 1 つのサブルーチンにマージしたいと考えていますが、それらすべてを認識していることを確認して、見逃さないようにする必要があります。
このような場合に私が通常行うことは、各セクションを別のファイルにコピーしてから、tkdiff または vimdiff を使用して違いを強調することです。中間ファイルをスキップして、同じファイルの 2 つの部分だけを比較する方法はありますか?
svn - SVN の標準差分形式
標準または通常の diff 形式は SVN に存在しますか、それとも統一形式のみですか?
algorithm - 2 つの Web ページが同じかどうかを判断する方法は?
Web ページが別のページと同じかどうかを検出するのに適した手法には、どのようなものがありますか?
同じように、char-for-char に相当するという意味ではありませんが (簡単です)、ページ上の現在の日付/時刻などを無視するのに十分なほど堅牢です。
たとえば、Yahoo! ニュース記事のページを読み込んで、10分後に別のブラウザで同じページを開く。むき出しの書き換えにより、それらのページにはいくつかの違い (タイムスタンプ、おそらく広告のようなもの、おそらく関連する記事のようなもの) がありますが、人間は 2 つを見て同じであると言うことができます。
URLの正規化を修正(または依存)しようとしているわけではないことに注意してください。つまり、foo.html と foo.html?bar=bang が同じであることがわかります。
merge - マージするdiffの両側を追加します
2つのXMLファイルがあります。それらは似ていますが、2つのノードがあり、どちらのファイルにも1つしかありません。このようなドキュメントの2つのセットを1つのドキュメントにマージし、最初にサイドAのノードを取得し、次にサイドBのノードを取得します。
私はdiffツールの経験豊富なユーザーではなく、どこかで開始するためにKDiff3をダウンロードしました。誰かが私を正しい道に導いてくれますか?
--編集--diff
ツールを見つけることは、私が自分で管理できるものです。
しかし、これらのツールの1つを作成する方法(どちらでも構いません)は、最初にfile1から、次にfile2からパーツを挿入することにより、自動的にマージを実行します。私が探しているのはです。これはかなり大量のファイルなので、マージプロセスに介入しないことが望ましいです。
diff - 特定の単語を含む行の違いを表示する diff のオプション
diffを使用して、特定の単語を含む行のみの違いを表示する方法はありますか?