戻る

リスト比較

テキストツール

読み込み中

ツールを読み込んでいます

ツールのコードは開いたときにのみ読み込まれます。

このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。

このツールについて

識別子・タグ・タスク名のリストを、数値に変換せずに比較します。物理行ごとに一項目として扱い、共通部分、A から B を除いた集合、B から A を除いた集合、和集合、対称差を表示します。比較キーの前後空白除去や JavaScript の小文字規則を選べます。結果には最初の原表記と出典行を残すため、キーが一致しても出力値を書き換えません。処理はブラウザー内で完結し、一致は文字列の比較だけを意味します。本人確認、アカウントの所有確認、現実世界での同一性判定には使用できません。

主な用途

  • 在庫コードの二つの一覧を比較し、先頭ゼロや長い数値形式の識別子を保持する。
  • 共通タグや追加・削除項目を調べ、明確な出典順序で重複のない一覧を作る。
  • ローカル出力の前に、繰り返すラベルや前後の空白、大文字・小文字の差を確認する。

使い方

  1. 1.A と B に一行一項目で貼り付けるか、厳密な UTF-8 ファイルを選びます。CRLF・LF・CR が区切りで、その他の Unicode 区切り文字は項目内に残ります。先頭 BOM は U+FEFF テキストとして保持します。
  2. 2.キーのトリムと大文字・小文字の区別を選び、比較します。既定はトリムなし・大小文字を区別です。分割行、空キー、空でない出現、一意キー、追加重複の件数を確認します。
  3. 3.五つの集合から選び、ASCII 表記の原文・キー、最初の出典行、両側の回数を確認します。警告を確認してコピー・保存してください。TXT は選択した集合、JSON は両方の完全な入力と五つの集合全体を含みます。

実行可能な例:ASCII JSON 入力と期待する原文項目

五つの集合を比較

{"a":"red\nblue","b":"blue\ngreen","options":{"trim":false,"caseSensitive":true}}
{"intersection":["blue"],"aOnly":["red"],"bOnly":["green"],"union":["red","blue","green"],"symmetricDifference":["red","green"]}

共通の blue は A の原文を使用。和集合は A の順序の後に B のみの green を追加します。

最初の出現と重複数

{"a":"b\na\nb\na","b":"a\na\nc","options":{"trim":false,"caseSensitive":true}}
{"intersection":["a"],"aOnly":["b"],"bOnly":["c"],"union":["b","a","c"],"symmetricDifference":["b","c"]}

同じキーは一つの代表にまとめます。共通の a は A の 2 行目で、countA と countB は両方 2 です。

キーだけをトリム

{"a":"  Ada \nAda","b":"Ada\n Bob ","options":{"trim":true,"caseSensitive":true}}
{"intersection":["  Ada "],"aOnly":[],"bOnly":[" Bob "],"union":["  Ada "," Bob "],"symmetricDifference":[" Bob "]}

A の二つの表記は同じ Ada キーになります。出力する代表には元の前後の空白が残ります。

既定の大文字・小文字区別

{"a":"Ada","b":"ada","options":{"trim":false,"caseSensitive":true}}
{"intersection":[],"aOnly":["Ada"],"bOnly":["ada"],"union":["Ada","ada"],"symmetricDifference":["Ada","ada"]}

大文字・小文字を区別する場合、Ada と ada は別の項目です。

ロケール非依存の小文字化

{"a":"Ada\nADA","b":"ada\nBOB","options":{"trim":false,"caseSensitive":false}}
{"intersection":["Ada"],"aOnly":[],"bOnly":["BOB"],"union":["Ada","BOB"],"symmetricDifference":["BOB"]}

Ada と ADA は同じ小文字キーとなり、共通項目は A の最初の表記を使います。

シャープ s と ss は異なる

{"a":"\u00df\nSS","b":"ss","options":{"trim":false,"caseSensitive":false}}
{"intersection":["SS"],"aOnly":["\u00df"],"bOnly":[],"union":["\u00df","SS"],"symmetricDifference":["\u00df"]}

SS は ss になりますが、ß は小文字化しても ss にはなりません。

文脈に依存するシグマ

{"a":"\u03a3\n\u039f\u03a3","b":"\u03c3\n\u03bf\u03c3","options":{"trim":false,"caseSensitive":false}}
{"intersection":["\u03a3"],"aOnly":["\u039f\u03a3"],"bOnly":["\u03bf\u03c3"],"union":["\u03a3","\u039f\u03a3","\u03bf\u03c3"],"symmetricDifference":["\u039f\u03a3","\u03bf\u03c3"]}

Σ は σ になりますが、ΟΣ の語末は ς となり、明示した οσ とは異なります。

トルコ語専用の変換はしない

{"a":"I\n\u0130\n\u0131","b":"i\ni\u0307","options":{"trim":false,"caseSensitive":false}}
{"intersection":["I","\u0130"],"aOnly":["\u0131"],"bOnly":[],"union":["I","\u0130","\u0131"],"symmetricDifference":["\u0131"]}

I は i、İ は i と結合ドットになります。ドットなしの ı は別項目のままです。

Unicode 正規化はしない

{"a":"\u00e9","b":"e\u0301","options":{"trim":false,"caseSensitive":true}}
{"intersection":[],"aOnly":["\u00e9"],"bOnly":["e\u0301"],"union":["\u00e9","e\u0301"],"symmetricDifference":["\u00e9","e\u0301"]}

合成済み é と e に結合アクセントを続けた表記は、見た目が似ていても別項目です。

識別子は正確な文字列

{"a":"001\n1\n9007199254740993\n__proto__","b":"1\n9007199254740992\nconstructor","options":{"trim":false,"caseSensitive":true}}
{"intersection":["1"],"aOnly":["001","9007199254740993","__proto__"],"bOnly":["9007199254740992","constructor"],"union":["001","1","9007199254740993","__proto__","9007199254740992","constructor"],"symmetricDifference":["001","9007199254740993","__proto__","9007199254740992","constructor"]}

先頭ゼロ、安全な Number 精度を超える整数、プロトタイプ風の名前を変更せず保持します。

トリムなしでは空白もデータ

{"a":"\n \n\t\n","b":"","options":{"trim":false,"caseSensitive":true}}
{"intersection":[],"aOnly":[" ","\t"],"bOnly":[],"union":[" ","\t"],"symmetricDifference":[" ","\t"]}

空のキーだけを無視します。トリムがオフなら、空白一つとタブ一つは別の一意項目です。

トリム後の空キーを無視

{"a":"\n \n\t\n","b":"","options":{"trim":true,"caseSensitive":true}}
{"intersection":[],"aOnly":[],"bOnly":[],"union":[],"symmetricDifference":[]}

A の全行が空のキーになります。末尾 LF も物理分割行を一つ追加します。

CRLF・CR・LF の区切り

{"a":"a\r\nb\rc\n","b":"c\na","options":{"trim":false,"caseSensitive":true}}
{"intersection":["a","c"],"aOnly":["b"],"bOnly":[],"union":["a","b","c"],"symmetricDifference":["b"]}

A は末尾の空行を含む 4 行です。A の順序と 1 始まりの元の行番号を保持します。

BOM と Unicode White_Space の違い

{"a":"\ufeffx\n\u0085x","b":"x","options":{"trim":true,"caseSensitive":true}}
{"intersection":["\ufeffx"],"aOnly":["\u0085x"],"bOnly":[],"union":["\ufeffx","\u0085x"],"symmetricDifference":["\u0085x"]}

String.trim は前後の U+FEFF を除去しますが、ECMAScript の対象外である U+0085 NEL は保持します。

端の NBSP だけを除去

{"a":"\u00a0x\u00a0\nx\u00a0y","b":"x\nx y","options":{"trim":true,"caseSensitive":true}}
{"intersection":["\u00a0x\u00a0"],"aOnly":["x\u00a0y"],"bOnly":["x y"],"union":["\u00a0x\u00a0","x\u00a0y","x y"],"symmetricDifference":["x\u00a0y","x y"]}

前後の NBSP だけをキーから除去します。内部の NBSP と通常の空白は異なるままです。

U+2028 はリスト区切りではない

{"a":"a\u2028b","b":"a\nb","options":{"trim":false,"caseSensitive":true}}
{"intersection":[],"aOnly":["a\u2028b"],"bOnly":["a","b"],"union":["a\u2028b","a","b"],"symmetricDifference":["a\u2028b","a","b"]}

CRLF・LF・CR だけで分割します。内部の Unicode 行区切りは一つの項目内に残ります。

危険な文字列も文字データ

{"a":"<img src=x onerror=alert(1)>\n=1+1\n\u202eabc\n\u0000","b":"=1+1","options":{"trim":false,"caseSensitive":true}}
{"intersection":["=1+1"],"aOnly":["<img src=x onerror=alert(1)>","\u202eabc","\u0000"],"bOnly":[],"union":["<img src=x onerror=alert(1)>","=1+1","\u202eabc","\u0000"],"symmetricDifference":["<img src=x onerror=alert(1)>","\u202eabc","\u0000"]}

HTML 風の文字列・数式・双方向制御・NUL はデータです。ASCII で確認できますが、生の TXT にはそのまま残ります。

孤立サロゲートを JSON で保持

{"a":"\ud800","b":"\ud800\nx","options":{"trim":false,"caseSensitive":true}}
{"intersection":["\ud800"],"aOnly":[],"bOnly":["x"],"union":["\ud800","x"],"symmetricDifference":["x"]}

共通の上位サロゲートは正確な UTF-16 単位として残ります。この集合の TXT は無効ですが、JSON はエスケープで保持します。

よくある誤り

  • 重複出現を、回数付きの一つのキーではなく複数の集合要素と考える。
  • 大小文字の無視をケースフォールディング、トルコ語専用変換、アクセント除去と取り違える。
  • 表示用のエスケープと TXT・JSON が保持する原文値を混同する。
  • TXT が元の改行、重複行、無視した行、出典情報を保持すると期待する。
  • 選択した結果だけと思って、両側の完全な原文も含む JSON を共有する。

制限と注意事項

  • 正確なトリム対象:U+0009, U+000A, U+000B, U+000C, U+000D, U+0020, U+00A0, U+1680, U+2000–U+200A, U+2028, U+2029, U+202F, U+205F, U+3000, U+FEFF。ECMAScript String.trim の空白集合であり、Unicode White_Space 属性とは異なります。U+FEFF を含み、U+0085 と U+200B は含みません。CR・LF は先にリスト区切りとして処理します。キーの前後だけを除去し、原表記は保持します。 大小文字を区別しない場合、実行環境のロケール非依存 ECMAScript String.prototype.toLowerCase を使用します。Unicode ケースフォールディングやロケール照合ではありません。Σ は文脈で σ または語末 ς となり、ß は ss と一致せず、İ は i と結合ドットになります。NFC・NFD・NFKC・NFKD、アクセント除去、幅変換、あいまい照合、本人推定は行いません。
  • 各側は 131,072 UTF-16 単位、10,000 物理分割行までです。空入力は無視される一行、末尾区切りは追加の空行として数えます。ファイルは厳密な UTF-8 で 524,288 バイトまで。不正バイトは置換せず拒否します。BOM は保持し、トリムを選んだ場合だけキー端の U+FEFF を除去します。ブラウザーの貼り付けやクリップボードが処理前後に改行を変える場合があります。 最大 20,000 一意項目、五つの集合で合計 60,000 項目参照です。画面は最大 300 行、各セル 256 UTF-16 単位まで表示し、省略を通知します。TXT は 1,048,576 UTF-8 バイト、ASCII JSON は 8,000,000 バイトまで。上限超過時は出力を拒否し、黙って切り詰めません。入力や比較設定の変更で前の結果は無効になります。
  • 空の比較キーは無視します。追加重複数は各側の空でない出現数から一意キー数を引いた値です。各キーは最初の原文と 1 始まりの行番号を保持します。共通キーは A を代表とし、A の項目と B のみの項目はそれぞれ元の順序です。和集合・対称差は A の後に B のみを追加します。数値変換、並べ替え、出現回数による展開はしません。
  • TXT は選択した原文項目を LF で連結し、末尾 LF を追加しません。制御文字・双方向文字・HTML 風テキスト・表計算の数式接頭辞はそのままです。CSV や数式保護は提供しません。孤立 UTF-16 サロゲートがある場合、置換損失を防ぐため生の TXT のコピー・保存を拒否します。ASCII プレビューが安全でも他のアプリで原文が安全とは限りません。
  • JSON は無視された行、重複表記、元の CRLF/CR/LF を含む両側の完全な原文、設定、統計、五つの集合を無損失で保持します。非 ASCII・制御文字・孤立サロゲートはエスケープします。選択中の集合以外も含み、匿名化や暗号化ではありません。入力のアップロード、外部照会、永続保存はしません。コピーと保存は明示操作です。

よくある質問

行単位のテキスト差分とは何が違いますか?

集合比較はキーの存在を比較し、重複キーを一つにまとめます。対応する行を整列したり、隣接行の変更を検出したりしません。行位置と変更箇所が重要ならテキスト差分を使用してください。

トリムや小文字化で出力の表記も変わりますか?

設定は照合キーだけに作用します。代表はその側で最初に出現した原文で、空白や大小文字も保持します。共通キーは A を使うため、A・B を交換すると表記と順序が変わる場合があります。

見た目が同じなのに一致しない理由は?

Unicode の配列、NBSP、ゼロ幅文字、大小文字規則の違いでキーが異なる場合があります。正規化や本人推定はしません。ASCII キープレビューを確認し、別途整形するか判断してください。

生の出力を表計算ソフトで開いても安全ですか?

TXT は数式保護がなく CSV でもありません。=・+・-・@ などの接頭辞の解釈や、数値風識別子の変換が起こり得ます。JSON は文字列とメタデータを保持しますが、両側の完全な入力も含みます。出力先と内容を確認してください。

関連ツール