リスト比較
テキストツール
読み込み中
ツールを読み込んでいます
ツールのコードは開いたときにのみ読み込まれます。
このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。
このツールについて
識別子・タグ・タスク名のリストを、数値に変換せずに比較します。物理行ごとに一項目として扱い、共通部分、A から B を除いた集合、B から A を除いた集合、和集合、対称差を表示します。比較キーの前後空白除去や JavaScript の小文字規則を選べます。結果には最初の原表記と出典行を残すため、キーが一致しても出力値を書き換えません。処理はブラウザー内で完結し、一致は文字列の比較だけを意味します。本人確認、アカウントの所有確認、現実世界での同一性判定には使用できません。
主な用途
- 在庫コードの二つの一覧を比較し、先頭ゼロや長い数値形式の識別子を保持する。
- 共通タグや追加・削除項目を調べ、明確な出典順序で重複のない一覧を作る。
- ローカル出力の前に、繰り返すラベルや前後の空白、大文字・小文字の差を確認する。
使い方
- 1.A と B に一行一項目で貼り付けるか、厳密な UTF-8 ファイルを選びます。CRLF・LF・CR が区切りで、その他の Unicode 区切り文字は項目内に残ります。先頭 BOM は U+FEFF テキストとして保持します。
- 2.キーのトリムと大文字・小文字の区別を選び、比較します。既定はトリムなし・大小文字を区別です。分割行、空キー、空でない出現、一意キー、追加重複の件数を確認します。
- 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 は文字列とメタデータを保持しますが、両側の完全な入力も含みます。出力先と内容を確認してください。