作成日 :

1-6.icon-awesomes – CSV テーブルボディ

概要

スプレッドシートのデータを [ファイル → 共有 → Web出力] から CSV 出力し、テーブルコンテナのデータ要素「data-csv-url」から CSV ファイル URL を読み取り、スプレッドシートから出力できなかった画像データから空白列を1列削除し、その出力できなかった PNG 画像をセルの slug から PNG 画像パス整形して表示し、「data-table-class」からテーブルコンテナにクラス名、さらにスクリプトからセルに「行 – 列番号」クラス名を付与しスタイルする。PNG、SVGデータはディレクトリに保存する。

また、スプレッドシートからCSV変換する際のエスケープを正規表現により解除する。

なお、テーブルヘッダの構成が単純でない場合、CSV を tbody データ部からとし、テーブル構造を確認する意味からも、HTMLには thead を直記述して tbody から CSV 入力する。

icon-awesomes

植物   slugpngsvg
CSVデータを読み込み中…
ファイル  slugpngsvg
CSVデータを読み込み中…
電気  slugpngsvg
CSVデータを読み込み中…
ブランド  slugpngsvg
CSVデータを読み込み中…
その他  slugpngsvg
CSVデータを読み込み中…
その他2  slugpngsvg
CSVデータを読み込み中…

CSVとSVGの共存

本来、CSVは「フラットな表データ」のための形式であり、SVGのような「階層構造を持つリッチなデータ」を入れることを想定していないが、Web 開発の現場では、デザインアセットの管理、データのポータビリティにおいて必要とされ、Web スプレッドシートからCSV変換する際のエスケープを正規表現により解除する。

  1. 基本原則と特性の対比
    CSV:カンマ(列区切り)、改行(行区切り)、引用符(データ区切り)をによる単純な平面的構造
    SVG:XMLベースのテキストであり、内部に大量のカンマ(数値区切り)、改行(可読性)、引用符(データ属性値の囲み)を持つ立体的構造
  2. 構造的衝突
    階層の入れ子:1次元のCSVセル内に、多次元のXMLが閉じ込められる矛盾
    記号、デリミタ(区切り文字)の重複:セル区切り文字としてと、データ数値区切りとしてのカンマ、行区切りと可読性としての改行の、データ区切りとしての引用符の衝突
    引用符の競合:CSVエスケープ(””)と、SVG属性値(”)の判別困難
  3. 正規表現によるエスケープ解除( CSVパーサー
    行分割:sフラグと肯定先読みによる、真の改行の特定 引用符外の改行だけを狙う /(".*?"|[^"\r\n]+)+(?=\r?\n|\n|$)/gs
     ■ sフラグ(dotAll):整形用改行「. 」を文字として読み込み、1レコードを維持する。
     ■ 肯定先読み:引用符外の改行のみをレコード終端と識別し、物理的な改行と峻別する。
    列分割:引用符保護による、SVGパスデータの隔離 二重引用符を突破し、カンマの「隙間」を逃さない
     ■ 引用符保護 "([^"]*(?:""[^"]*)*)" :”.*?” 内のカンマを隔離する。
     ■ 肯定先読み・後方参照による「空列の厳密な捕捉」 (?<=,)(?=,)|(?<=,)(?=$)|(?<=^)(?=,)
     通常の split(',') では、,,(空データ)が連続した場合にインデックスがずれたり、無視されたりするが、この正規表現は「文字」ではなく、「カンマの間の隙間」をスキャンする。
     (?<=,)(?=,):カンマとカンマの間の「無」を捕捉
     (?<=,)(?=$):行末のカンマの後の「無」を捕捉
     (?<=^)(?=,):行頭のカンマの前の「無」を捕捉

HTML JavaScript コード