web-dev-qa-db-ja.com

テキストファイルでは、Excelファイルよりも同じデータのスペースが大きくなるのはなぜですか?

約10万行のデータがあります。このデータをテキストファイル形式で保存した場合、Excelファイル形式で保存した場合よりも多くのスペースが必要になります。何故ですか?

59
user734178

現代のExcelで使われている xlsxフォーマット は、実際には圧縮フォーマットです。これは、特定の構造のテキスト(XML)ファイルを含むZipアーカイブです。

プレーンテキストファイルを同様のZip圧縮ツールで圧縮した場合は、同様のファイルサイズになります。

また、コメントの中で Bradley UffnerMorgen が述べているように、Excel 同一の文字列を重複排除し、それらのコピーを1つだけ格納します。私はそのような方法の正確な利得についてはよくわかりません、そしてそれはあなたのデータセットに依存します、しかし単純なZip圧縮はおそらくあなたをそこにほとんどの方法をもたらすでしょう。1


9.1.3物理パッケージ

各Office Open XML文書はZipアーカイブとして実装されています。

- ECMA-376-1:2016


1 Zip圧縮はアーカイブ内の各ファイルに独立して適用され、一度にデータの限られたセクションにのみ適用されるため、すべての文字列を1つのファイルにまとめて保存する必要があります。後の圧縮にはある程度の利点があります。もっと実用的には、あなたのプレーンテキストフォーマットがとにかく単一のファイルにあるならば、おそらくほとんど違いはないでしょう。

118
Bob

与えられた答えは正しいです、それはxmlとしてあなたのデータを保存しているExcelによるものです。これは、データを効率的にソートするとファイルサイズも小さくなるためです。自分でテストしてください。

A            B                              C
John         Smith-Johnson-Williamson       12345
Sally        Smith-Johnson-Williamson       67890
John         Williams                       34567

C(すべてまたはほとんどすべての固有値を含む列)のみでソートした場合、Bの同一値は隣接しません。 Excelのxmlでは、このようになります。

<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>

B(共通の値を持つ列)でソートすると、同じ値が隣接します。 Excelのxmlでは、このようになります。

<Smith-Johnson-Williamson><John><12345>
  <Sally><67890>
<Williams><John><34567>

その長い文字列は同一で隣接しているので、リストを書くときと同じようにそれらを一緒に詰めることができ、上の行の一部を繰り返すために同じものを書き直すのではなく引用符を入力します。私の調査では、共有文字列辞書の証拠は見つかりませんでした - 繰り返しフィールド値の代わりにこの字下げをしただけです。

私は11州だけで25万人の顧客のメーリングリストを持っていました、そして各レコードに彼らが得るオファーを識別する2つの文字列のうちの1つであるフィールドがありました。私たちの従業員は、何らかの理由で、話されている通りの住所で人々を探すのに慣れていたので、最初に申し出に頼ったときには通り番号、次に通りの名前、都市などでソートしました。郵便番号、市区町村、番地、番地、そして最後にaddress-line-2、ファイルサイズは驚くほど小さくなりました。ファイルの解凍されたxmlを各方向にソートして何が起こっているのかを調べました。以上が私が推測したものです。 5文字以上のフィールドが複数あり、その値が限られている場合(「解決」、「拒否」、「承認」などのチケット処理)、並べ替えを検討して、助けになる。

2
CompanionCube