【連載】

Windows 10で始めるBash

37 HTMLコードの出力シェルスクリプトをRowspan属性に対応させる

37/46

Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBUW(Bash on Ubuntu on Windows)が動作し、各種Linuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

HTMLコードの出力シェルスクリプトをRowspan属性に対応させる

前回の記事で予告したように今回はTableタグを出力するシェルスクリプトを、垂直(Y)方向に結合するRowspan属性に対応させてみる。その前に1つお詫びを述べておきたい。普段から直前のシェルスクリプトをベースにお題に応じて書き換えているが、よく見るとif文のインデントが部分的にずれていた。出力するHTMLコードのインデントに意識が向いていたらしく、ソースコードの見直しがなおざりになってしまったようである。

また、HTML出力に関する一連のシェルスクリプトでif文にダブルパーレン(「((~))」)を使用していることにお気付きだろう。通常であれば「if [ 条件式 ];」と記述するのがBash的?だが、筆者自身がC言語出身ということも相まって、Arithmetic Expansion式で書いていることに後から気付いてしまった。Arithmetic Expansionは比較演算子に「==」や「!=」といった他言語でお馴染みの記号が使えるため、個人的にはお薦めしたい。だが、最初に説明することをすっかり念頭から抜けていたため、読者諸氏には改めてお詫びする。

さて、HTMLをご存じの方ならご承知のとおり、Rowspanをtdタグやthタグで指定した場合、その分の列を埋めるためのセルを並べなければならない。そのため、水平(X)方向にセルを結合させるColspan属性と異なり、個別の条件式が必要となる。そこで今回はRowspanを含むタグを出力したらフラグを立てて、次のループではスキップする簡単な仕掛けを加えることで対応した。

それではいつもどおり任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、「chmod」コマンドなどで実行権限を与えて動作を確認してほしい。

 #!/bin/bash

 FILE=/mnt/c/Users/kaz/Desktop/Table.html
 FLAG=0

 echo "行数(1以上)"
 read TR

 echo "列数(1以上)"
 read TD

 echo "水平(X)方向の結合見出しセル数(2以上)"
 read COLSPAN

 echo "垂直(Y)方向の結合見出しセル数(2以上)"
 read ROWSPAN

 echo -e '<html>\n\n<div class="center">' >$FILE
 echo '<table class="Table1" border="1" cellPadding="0" cellSpacing="1" >' >>$FILE
 if (($COLSPAN > 1)); then
    printf "\t<tr>\n\t\t<td></td>\n\t\t<th colspan=\"%d\">結合見出しセルX</th>\n\t</tr>\n" $COLSPAN >>$FILE
    echo -e '\t<tr>\n\t\t<td></td>' >>$FILE
    for ((y2=0; y2 < $COLSPAN; y2++)); do
        echo -e '\t\t<th>見出しセルX</th>' >>$FILE
    done
 fi
 for ((y=0; y < $TR; y++)); do
    if (($ROWSPAN > 1 )); then
        if (($FLAG == 0)); then
            printf "\t<tr>\n\t\t<th rowspan=\"%d\">結合見出しセルY</th>\n" $ROWSPAN >>$FILE
            FLAG=1
        else
            FLAG=0
        fi
    else
        echo -e '\t<tr>\n\t\t<th>見出しセルY</th>' >>$FILE
    fi

    for ((x=0; x < $TD; x++)); do
        echo -e '\t\t<td>セル</td>' >>$FILE
    done
    echo -e '\t</tr>' >>$FILE
 done

 echo -e '</table></div>\n\n</html>' >>$FILE

シェルスクリプトを実行すると、Tableタグの「行数」「列数」に続いて「水平方向に結合する見出しセル」「垂直方向に結合する見出しセル」の入力をうながしてくる。Windows 10のデスクトップにHTMLファイルである「Table.html」を出力するのは前回と同じだ。

Webブラウザーで開くと、基本的な内容が確認できる。なお、Webブラウザーによっては文字コードを指定していないため、文字が正しく表示されない可能性もある

垂直方向のみセル結合を行ったHTMLファイルの表示結果。数値入力時は「行数÷垂直方向に結合する見出しセル」の除算で剰余が出ないように気を付けてほしい

垂直方向のセル結合数を「1」以下にした場合は、単純はTableタグを出力する

今回のシェルスクリプトは、28~37行目のif文を新たに追加した。最初に入力をうながした垂直方向に結合する見出しセル数を格納した変数ROWSPANが2以上であれば29~34行目のif文を実行し、フラグである変数FLAGの値が「0」であればRowspan属性を付与して、FLAGの値を「1」に変更。そして最初からFLAGの値が「1」の場合は33行目でフラグをリセットする単純な仕組みだ。これにより、不要なRowspan属性の出力を抑止している。

こちらが出力したHTMLファイルの内容

ところでTableタグには、表にタイトルを付けるcaptionタグやセル内の自動改行を抑止するNowrap属性など、他にも追加すべき要素がある。今回のシェルスクリプトはあくまでもWeb記事に表を挿入するための叩き台となるHTMLコードを出力するのが主目的だが、自動化できる範囲が増えれば、日常業務の負担も軽減できるはずだ。次回はこの観点からシェルスクリプトの拡張にチャレンジする。

<お知らせ>
ITソリューション検討Information

マイナビニュースのIT Search+では、ITソリューションの検討に役立つ情報を掲載しています。
ここでは、IT Search+の人気記事ベスト3をご紹介。ぜひ、ビジネスにお役立てください。

37/46

インデックス

連載目次
第46回 Windows 10とWSLの最新バージョンをBashで取得する
第45回 米国本家のOfficeの最新バージョン情報もBashで取得する
第44回 インストール済みのOfficeバージョンを取得する
第43回 Office 2016の最新バージョン情報を公式サイトから取得する
第42回 1週間のファイルをISOファイルに書き込むシェルスクリプト
第41回 WSL上のLinuxディストリビューションを変更する
第40回 知ってますか今年の祝日? 国民の祝日自動取得シェルスクリプト
第39回 Bashから当日使ったファイルをWindowsのアプリケーションで開く
第38回 Findで当日使ったファイルを検索する
第37回 HTMLコードの出力シェルスクリプトをRowspan属性に対応させる
第36回 HTMLのTableタグ出力シェルスクリプトをColspanに対応させる
第35回 BashでHTMLのTableタグを楽に
第34回 ファイル名の大/小文字一括変更シェルスクリプトをオプションで制御する
第33回 規則に応じたファイル名の大/小文字化
第32回 拡張子を一括で小文字に統一するスクリプト
第31回 Googleカレンダーから情報を抜き出す
第30回 ドライブを占有するフォルダー容量をExcelで可視化する
第29回 ドライブを占有するフォルダー容量を「R」で可視化する
第28回 ドライブを占有するフォルダー容量をSparkで可視化する
第27回 ドライブを占有する容量をフォルダーごとに簡単確認
第26回 オプションを加え汎用性を高めたレジストリーキー比較スクリプト
第25回 Reg.exeの出力結果をカラフルにして見やすくする
第24回 Reg.exeの出力結果を比較する
第23回 getoptsを活用してイベントソース可視化を大幅に拡張する
第22回 BashからPowerShellを利用する
第21回 Windowsのイベントソースを可視化してオプションで表示を分ける
第20回 Windowsのイベントログを「Cut」で切り出し可視化する
第19回 PDFファイルを画像ファイル化する
第18回 PDFファイルから一括で大量の画像を抽出
第17回 複数PDFファイルから一括テキスト抽出
第16回 文章をMarkdown記法で整える
第15回 ファイル名ではなく内容判断で重複ファイルを削除するには?
第14回 整理整頓!空のフォルダを一括でデスクトップに移送する
第13回 フォルダの中のファイルを一括でPDFにするには
第12回 フォルダーの中のエクセル請求書ファイルを合計する
第11回 BashからExcelブックにアクセスする
第10回 時間軸でデスクトップを片付ける
第9回 散らかったデスクトップを片付ける
第8回 インターネットショートカットファイルを作成する
第7回 取得結果をCSVファイルやテキストファイルに出力する
第6回 Webページの情報をシェルスクリプトで取得する
第5回 case文でスクリプト内容を整理する
第4回 実行先のフォルダーを引数で指定する
第3回 ピクセルサイズに応じて画像ファイルをリサイズする
第2回 他の画像形式をJPEG形式に変更する
第1回 フォルダー内のJPEGファイルを連番でリネームする

もっと見る



人気記事

一覧

イチオシ記事

新着記事