TSVの読み込み

TSVを読み込み、画面にテーブルで表示

TSV

1 Apple リンゴ 2 Banana バナナ (略) 7 Tennis テニス 8 Basketball バスケットボール

PHP

// CSV指定 $file_name = 'sample.tsv'; // 存在チェック if (! file_exists($file_name)) { exit; } // 読込許可をチェック if (! is_readable($file_name)) { exit; } // CSV読み込み $contents = file_get_contents($file_name); // 文字コード(TSVがUTF8であれば不要) $contents = mb_convert_encoding($contents, 'UTF-8', 'SJIS'); // 改行で分割 $lf = explode("\n", $contents); $pre_num = 0; $pre_line = ''; foreach($lf as $lfKey => $lfVal) { // 改行毎のダブルクオート数 $this_num = mb_substr_count($lfVal, '"'); $sum_num = $this_num + $pre_num; if (empty($pre_line)) { $multi_line = $lfVal; } else { // 改行で前行と結合 $multi_line = $pre_line . "\n" . $lfVal; } if ($sum_num % 2 == 0) { // ダブルクオートが偶数 $lines[] = $multi_line; $pre_num = 0; $pre_line = ''; } else { // ダブルクオートが奇数 $pre_num = $sum_num; $pre_line = $multi_line; } } if (! empty($lines)) { foreach($lines as $linesKey => $linesVal) { $linesVal = trim($linesVal); // 空行は除外 if (! empty($linesVal)) { // タブで分割 $cell = explode("\t", $linesVal); if (! empty($cell)) { foreach($cell as $cellKey => $cellVal) { // セル前後のダブルクオートを削除、セル内の""を"へ置換 $data[$linesKey][$cellKey] = str_replace('""', '"', trim($cellVal, '"')); } } } } $this->view->assign('data', $data); }

Smarty

<table> {foreach $data as $row} <tr> {foreach $row as $cell} <td>{$cell|escape}</td> {/foreach} </tr> {/foreach} </table>

セル複数行対応はCSVの読み込みと同じ。

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。主にLAPP環境でPHPを書いています。最近はjQueryで遊んでいます。
※動作確認について