创建HTML表
此示例演示使用特殊函数生成HTML表。 tag 用朱莉娅的语言。
导言
HTML表格创建算法解决了生成动态HTML页面内容的问题。 在这种情况下,我们使用编程方法以HTML格式创建表格数据。 这对于准备报告、呈现计算结果或需要行和列数据结构的任何其他用途都很有用。
HTML表由以下元素组成 <table>, <thead> / <tbody>, <tr> (行), <th> (标题)及 <td> (细胞)。 我们使用基于功能的简单方便的设计自动化整个结构 tag. 该函数允许您灵活地设置标签及其属性,而不必知道HTML语法的所有细节。
功能 tag
功能 tag 接受标记名称(作为第一个参数)和属性对列表 name => value. 它与表单中的HTML标记形成一个字符串:
"""
标签(x)函数::对,attr::对...)创建一个HTML标签。
:param x:一对形式(:TagName=>内容)
:param attr:可变对数:attributeName=>Value
:返回:标签的字符串表示
"""
function tag(x::Pair, attr::Pair...)
t, b = x # 提取标签名称(t)和内容(b)
attrstr = join(" $n=\"$p\"" for (n, p) in attr) # 收集属性字符串
return "<$t$attrstr>$b</$t>" # 构建标签本身
end
生成表列(colnames)
在下一步中,将确定表的列名。 它们是通过使用函数用逗号分隔字符串",X,Y,Z"来获得的 split().
阵列 colnames 将包含一个字符串数组 ["", "X", "Y", "Z"].
# 将字符串",X,Y,Z"拆分为字符','以获得列名列表。
# 因此,我们在第一个逗号之前得到一个空字段–这是左列的标题。
colnames = split(",X,Y,Z", ',')
形成标题行(<thead>)
创建一个标题行-每个列名称都包装在HTML标记中。 <th>. 之后,将所有细胞合并使用 join(...) 通过 \n.
这部分将在标签内部使用。 <tr> 在进一步形成表头期间。
# 使用表头创建行。 我们为每个单元格制作一个th标签。
header = join(tag(:th => txt) for txt in colnames) * "\n"
准备数据行(<tbody>)
接下来,数据行本身在表的主体中生成。 我们骑自行车从1到6:
-每个房间 i 正在创建字符串 <tr>
-第一个单元格有一个样式 bold 其他三个是从1000到9999的随机数
字符串输出保存在集合中 rows.
# 我们生成表格的行-每行都有几个随机值的td单元格。
rows = collect(
tag(:tr =>
join(
tag(:td => i, :style => "font-weight: bold;") *
join(tag(:td => rand(1000:9999)) for j in 1:3)
)
) for i in 1:6
)
合并标题和数据
形成最终结构 <tbody> 通过在表行块周围添加换行符。
# 我们将所有行与数据合并到表体的一个块中。
body = "\n" * join(rows, '\n') * "\n"
最终表组装
最后一个阶段是把所有东西放在一起:我们把准备好的部分放在一个共同的标签中 <table>,其中也有自己的属性。 在这种情况下,表格宽度设置为60%。
最终结构:
我们在标签中收集整个表 <table>.
table = tag(:table => string('\n', header, body, '\n'), :style => "width: 60%")
HTML结果的最终输出。
print(table)
复制结果并将其粘贴到Markdown文本单元格中进行验证。:
<表格样式="宽度:60%">
</表格>
结论
我们已经回顾了动态HTML表生成算法的实现。 我们创建了一个自定义函数 tag,这使得组装任何HTML元素变得容易,包括带有属性的复杂标签。 基于该函数,成功生成了表的行和列、生成的表头和数据。
这种方法被广泛用于生成报告,分析数据,自动创建接口,甚至以HTML格式导出数据。 现在您可以在您的项目中应用此模板!
该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Create_an_HTML_table )