すべてのガイド

TSV・CSV のガイド

壊れた TSV ファイルを直す方法

壊れたタブ区切りファイルのほとんどは、5 つの失敗で説明がつきます。見え方はそれぞれ違い、直し方もそれぞれ違います。

「ファイルが壊れている」は、たいてい 5 つのうちのどれかを指しています。どれなのかを見分けることが仕事の大半です。直し方が型ごとに違い、間違った直し方を当てると状態が悪くなるからです。

全体を通しての前提として、調べるためにファイルを表計算ソフトで開かないでください。 Excel の取り込みは、あなたが目を通す前に値を変えてしまいます。そうなると、最初の問題の上にもう 1 つ問題を重ねた状態で診断することになります。

1. 列数の合わない行

見え方: ほとんどの行は列数が揃っているのに、いくつかの行だけ多い、あるいは少ない。ある位置から後ろの値が、間違った列に入っている。

起きたこと: あるセルにタブ文字が入り込みました。たいていはよそから貼り付けたものです。そのタブ 1 つが列の境目として読まれるため、その行だけ列が 1 つ増え、それより後ろがすべて 1 つずつ右へずれました。

直し方: その行を見つけ、分かれてしまったセルを見つけ、つなぎ直します。タブを消すか、そのセルを引用符で囲むかのどちらかです。ヘッダーより短い行は逆の場合で、保存時に末尾の空セルが切り落とされたことがほとんどです。空セルを補って揃え直すのは安全な操作です。

やってはいけないのは、余分な列をファイル全体から削除することです。ほかの行は正常であり、その操作は正常な行の最後の列まで道連れにします。

2. 目に見えない空白

見え方: 何も見えません。2 つの値が同一に見えるのに、参照が失敗し、結合が一致せず、翻訳キーが見つかりません。

起きたこと: 次のどれかがセルに入っています。

  • キーの末尾の半角スペース。1 文字多く拾ってしまったコピー&ペーストが原因であることがほとんどです。
  • 普通の空白であるべきところに入った改行なしスペース(U+00A0)。Web ページやワープロから貼り付けたときに紛れ込みます。
  • 全角スペース(U+3000)。日本語入力のまま打って、そのまま残ったものです。幅の広いすきまに見えますが、半角スペースとはまったく別の文字です。
  • 幅ゼロの文字(U+200B、U+FEFF)。見た目としての現れが一切ありません。

直し方: これらを目に見える形で描いてくれる道具が要ります。定義上、目で見つけることはできないからです。そのうえで削るか置き換えます。セルを 1 つずつではなく、ファイル全体に対して 1 回の操作として行ってください。そうしないと、見つかった 3 つを直して、見つからなかった 40 個をそのまま残すことになります。

3. 文字化け

見え方: é のはずのところに é、ダッシュのはずのところに â€"、あるいは � が散らばっている。日本語なら「縺ゅ>縺・∴」のような、ひらがなでも漢字でもない並び。

起きたこと: ある文字コードで書かれたファイルを、別の文字コードとして読みました。日本語で圧倒的に多い組み合わせは、UTF-8 のバイト列を Shift_JIS として読むか、その逆です。é は、UTF-8 のバイト列を windows-1252 として読んだ場合に出ます。

直し方: 正しい文字コードでファイルを開き直してください。壊れた文字を検索と置換で直そうとしてはいけません。置換は、目に見えている例だけを直して、影響を受けたほかの文字をすべて残します。そして、読み込みの段階で � に置き換わってしまった文字は、置換では取り戻せません。

読み違えたまま一度保存してしまった場合、元のバイト列は本当に失われている可能性があります。書き出し元が残っているなら、そこまで戻ってください。

4. 引用符の崩れ

見え方: 1 つの行が異常に長く、本来なら次の 20 行分にあたる内容がその中に入っている。あるいは、値の途中に、そこにあるはずのない引用符が現れる。

起きたこと: あるセルが二重引用符を開いたまま閉じなかったため、パーサーがそれ以降を——改行も含めて——その 1 つのセルの一部として扱いました。

直し方: おかしくなった最初の行を見つけます。釣り合っていない引用符は、その行の先頭にあります。閉じるか、取り除くかのどちらかです。テキストエディタが本当に役に立つ数少ない場面の 1 つです。探しているのは 1 文字であり、それがどのあたりにあるかも分かっているからです。

5. キーの重複、またはキーの欠落

見え方: 同じ識別子を持つ行が 2 つある。あるいは、キーの列が空の行がある。

起きたこと: たいていはマージ、2 回走ってしまった追記、あるいはセルを消してしまった手作業の編集です。

直し方: これはどんな道具も代わりにできません。できると言う道具は、推測しています。その重複が、消すべき複製なのか、優先されるべき新しい値なのか、たまたま同じ名前を与えられた別々の 2 つなのか。それを知っているのはあなただけです。道具がすべきことは、それらを見つけて、そこまで連れて行くことです。自動的な修復は、まさにそこで止まるべきです。

作業の順番

  1. まず文字コードを直します。 ほかのすべての作業はテキストの上に載るものであり、テキストが間違っていれば、間違った文字を直すことになります。
  2. 次に構造 — 引用符、それから列数です。どちらも列の境目がどこにあるかを変えるので、これが落ち着くまで、列について何ひとつ信用できません。
  3. それから中身 — 空白、それから重複です。これらはセル単位であり、まとめて処理しても安全です。
  4. 元の設定のまま書き出します。 同じ改行コード、同じ BOM、同じ引用符の付け方で。CRLF を黙って LF に変えてしまう修復は、次にそれを読むものにとってファイルを壊したのと同じです。

ここでやる場合

このサイトのエディタは、まさにこの一覧を軸に作られています。ファイルを開くと、見つかったものを報告します。列数の合わない行、見つかった不可視文字とその正確なコードポイント、文字コード、キーの重複。空白は表の中の、まさにその位置に描かれるので、末尾の半角スペースは推測するものではなく、目で見えるものになります。

自動化しても安全な修復は、ファイル全体に対する 1 つの操作として提示され、取り消しの履歴では 1 ステップに収まります。ですから試してみる代償はありません。安全でない修復——とりわけキーの重複——は、指し示すだけで、手を触れません。

アップロードはありません。ファイルを読み、直し、書き出しているのは、あなたのブラウザです。