■bashでhtml作成
エクセルネタに参加してみる。
ちなみに。。。
2007以前のエクセルでは、256(列)×65536(行)が最大【仕様】
2007以降のエクセルだと、16384(列)×104,8576(行)が最大【仕様】
参考:めんどうな作業がわずか数秒に!新人デザイナーが 知らないと
一生後悔するExcelを使ったHTML生成
一生後悔するExcelを使ったHTML生成
http://webrocketsmagazine.com/entry/20111209/html-code-generation-using-excel.html
参考:僕たちプログラマーは、ちょっとしたコード生成に、Excelを使いません!
http://d.hatena.ne.jp/takuya_1st/20111217/1324105198
参考:めんどうな作業がわずか数十秒に!新人プログラマが知らないと
一生後悔するVimを使ったHTML生成
一生後悔するVimを使ったHTML生成
http://mattn.kaoriya.net/software/vim/20111215034338.htm
■とりあえず、puttyでもTeraTermでもシェルにコピペできる端末に
最初のユーザプロンプト「$」を除いてコピペしてみよう。
※バッファの最大値は設定に依存。
※貼り付けた画像の画質が悪いのはわざとですので、
今後も画質が向上したりしません。。。
※貼り付けた画像の画質が悪いのはわざとですので、
今後も画質が向上したりしません。。。
■TITLE変数を設定して、表題を入れたヘッダ処理
$ TITLE=TEST; \
echo '<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>'${TITLE}'</title>
</head>
<body>
<br/><br/><br/><br/><br/>
<div align="center">
<table border="1">' >1.tmp
■1行づつコードを足しながら進める。
1.sedで行の先頭に<tr><td>をつける
2.sedで行末に</td></tr>をつける
3.awkで「,」を</td><td>に変換
※インデントはタブを4にしてもよいがタブは環境依存となる点に注意。
※列の入れ替えはここで出来る
※列の数はバッファを越えなければ良い。
4.</tr>を改行して整形
$ echo 'ギーク名,得意技
miyagawa,それプラ
tokuhirom,patches welcome
xaicron,lang:mattn
hasegawayosuke,xss
cho45,gerry++' | \
sed s/"^"/"<tr><td>"/g | \
sed s/"\$"/"<\/td><\/tr>"/g | \
awk -F\, '{print $1 "</td>\n <td>" $2}' | \
sed s/"<\/tr>"/"\n&"/g > 2.tmp
■フッタ処理
$ echo '</table>
</div>
</body>
</html>' > 3.tmp
■つなげる
各ファイルはモジュールなので、
見た目やレイアウトを変えたい場合は
それぞれ個別に修正する。
$ for num in `seq 1 3` ;do
cat ${num}.tmp >> index.html
done
■w3mでチェック
$ w3m index.html > test.txt
$ cat test.txt
![](https://stat.ameba.jp/user_images/20111218/20/labunix/e6/b8/p/t02200130_0800047111679368658.png?caw=800)
■csv がファイルなら?
「はい、コピペします。」
$ cat 0.csv | \
sed s/"^"/"<tr><td>"/g | \
sed s/"\$"/"<\/td><\/tr>"/g | \
awk -F\, '{print $1 "</td>\n <td>" $2}' | \
sed s/"<\/tr>"/"\n&"/g > 2.tmp
繰り返すなら保存しても良いけど、
ヘッダもフッタもローカル、外部に関わらず、
サンプルになるhtmlファイルはどこにでも在るはず。
■タブだったら?
「,」が無い事が前提。
$ cat tab.csv | \
sed s/"\t"/"","/g > 0.csv
■タブ区切りで「,」があるなら、
一旦ファイル中に存在しない記号に変換して戻す
$ cat tab.csv | \
sed s/","/"###"/g > 0.csv
※最後に変換する
$ cat index.html | sed s/"###"/","/g > index.htm
■大きめのCSVで試す
$ echo -n "列数:";head -1 0.csv | sed s/","/"\n"/g | wc -l
列数:15
$ echo -n "文字数:"; wc -c 0.csv
文字数:442701 0.csv
$ echo -n "行数:"; wc -l 0.csv
行数:4111 0.csv
■「,」が15以内に収まっているか確認する
$ awk -F\, '{print $16}' 0.csv | grep -v "^\$"
■必ず15列あることを確認する
$ awk -F\, '{print $15}' 0.csv | grep -v "^\$" | wc -l
4111
■入れ替える必要が無ければ、awkの代わりに sed で良い。
$ cat 0.csv | \
sed s/"^"/"<tr><td>"/g | \
sed s/"\$"/"<\/td><\/tr>"/g | \
sed s/","/"<\/td>\n <td>"/g | \
sed s/"<\/tr>"/"\n&"/g > 2.tmp
![](https://stat.ameba.jp/user_images/20111218/20/labunix/9a/b0/p/t02200129_0512030011679368657.png?caw=800)