特定のフォーマットの入力文字列からデータを解析し、そのデータを基にHTMLテーブルを生成するものです。具体的には、複数の「ブランチ」に関する情報が入力され、それぞれのブランチについてバージョンとキーに関連する値のペア(a,b,c,dなど)が含まれています。これらの情報を分析し、整理してHTMLテーブル形式で出力します。
# 入力文字列
input_string = "ブランチ1/V00.01/a:10:100,b:10:100,c:-----:-----,d:10:100 ブランチ2/V00.02/a:10:100,b:10:150,c:-----:-----,d:20:200"
# 入力文字列を処理してデータを抽出
branches_data = input_string.split()
branch_info = []
branch_names = []
data_keys_order = []
# データ項目の順序を保持するために最初のブランチから順序を取得
first_branch_data = branches_data[0].split('/', 2)[2]
data_keys_order = [item.split(':')[0] for item in first_branch_data.split(',')]
for branch in branches_data:
parts = branch.split('/', 2) # 最初の2つのスラッシュで分割
name, version, data = parts
branch_names.append(name)
data_items = data.split(',')
data_dict = {}
for item in data_items:
key, st_ver, st_size = item.split(':')
data_dict[key] = [st_ver, st_size]
branch_info.append({'name': name, 'version': version, 'data': data_dict})
# HTMLテーブルの作成を開始
html_output = '<table border="1">\n'
html_output += ' <tr>\n <th colspan="2">ブランチ</th>\n'
for name in branch_names:
html_output += ' <td colspan="2">{}</td>\n'.format(name)
html_output += ' <th rowspan="2">結果</th>\n' # 結果列のヘッダーを追加
html_output += ' </tr>\n <tr>\n <th colspan="2">バージョン</th>\n'
for info in branch_info:
html_output += ' <td colspan="2">{}</td>\n'.format(info['version'])
html_output += ' </tr>\n'
# データ行の処理
for key in data_keys_order:
values = [info['data'][key] for info in branch_info if key in info['data']]
numeric_values = [value for value in values[1] if value.isdigit()]
row_style = ''
result_cell = ''
if len(set(numeric_values)) > 1 and numeric_values: # 数値が一致しない場合(空リストを除外)
row_style = ' style="background-color:pink;color:red;"'
result_cell = ' <td{}>warning</td>\n'.format(row_style)
else:
result_cell = ' <td></td>\n'
html_output += ' <tr>\n'
if key == data_keys_order[0]: # 最初のキーであればrowspanを設定
html_output += ' <th rowspan="{}">機種</th>\n'.format(len(data_keys_order))
html_output += ' <th{}>{}</th>\n'.format(row_style, key)
for value in values:
cell_style = row_style if row_style else ''
html_output += ' <td{}>({})</td>\n'.format(cell_style, value[0])
html_output += ' <td{}>{}</td>\n'.format(cell_style, value[1])
html_output += result_cell # 結果セルを追加
html_output += ' </tr>\n'
html_output += '</table>'
print(html_output)