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の読み込みと同じ。