1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

特定のフォーマットの入力文字列からデータを解析し、そのデータを基にHTMLテーブルを生成する

Posted at

特定のフォーマットの入力文字列からデータを解析し、そのデータを基に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)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?