gpt4 book ai didi

html - 将空格转换为表格单元格

转载 作者:行者123 更新时间:2023-12-03 00:50:48 26 4
gpt4 key购买 nike

我有一个shell命令,我正在尝试使用Powershell将其很好地格式化为HTML。

这是shell输出产生的结果:

我正在使用以下代码从shell命令中解析该部分,并插入<br>标记以创建HTML友好输出。

$VPLEX = plink 192.168.10.10 -l admin -pw password ./health
$regex = '(?ms)Clusters:(.+?)Meta Data:'
$VPLEX = $VPLEX -join "<br>"
$VPLEX_Clusters = [regex]::Matches($VPLEX,$regex) | foreach {$_.groups[1].value}

然后,我尝试使用此代码将空格换成其他内容,我本来是想使用制表符(就像文字处理器可以处理它一样),但现在使用的是4 &nbsp;
$VPLEX_Clusters = $VPLEX_Clusters -replace ' {1,}', "&nbsp;&nbsp;&nbsp;&nbsp;"

$VPLEX_Clusters | Out-File F:\Scripts\healthcheck\test.html

这将产生以下结果:

如您所见,文本没有垂直对齐,因此很难理解。我在想,也许我可以将空格转换为新的表格单元格,并分别解析出每一行?不过,我真的不太确定,我希望有一种更简单的方法将shell输出转换为HTML,而不会丢失原始间距。

编辑
(新代码,已对齐,但仅使用第一行)
$VPLEX = plink 192.168.10.10 -l admin -pw password ./health
$regex = '(?ms)Clusters:(.+?)Meta Data:'
$VPLEX = $VPLEX -join "`r`n"
$VPLEX_Clusters = [regex]::Matches($VPLEX,$regex) | foreach {$_.groups[1].value}


$VPLEX_Clusters | Out-File F:\Scripts\healthcheck\Vplex.txt
(gc F:\Scripts\healthcheck\Vplex.txt | select -Skip 5) | sc F:\Scripts\healthcheck\cluster1.txt

$Vcluster1 = [IO.File]::ReadAllText("F:\Scripts\healthcheck\cluster1.txt")

$html = $Vcluster1 | % {
$cluster = $_ -split ' +'
New-Object -Type PSCustomObject -Property @{
'Clustername' = $cluster[0]
'Cluster ID' = [int]$cluster[1]
'State' = $cluster[2]
'Health' = $cluster[3]
'Connected' = [convert]::ToBoolean($cluster[4])
'Expelled' = [convert]::ToBoolean($cluster[5])
'Local-com' = $cluster[6]
}
} | ConvertTo-Html -Fragment

$html | Out-File F:\Scripts\healthcheck\test.html
Invoke-Expression F:\Scripts\healthcheck\test.html

这是从以下文件读取的文本文件(cluster1.txt):

这是最终的输出,如您所见,仅产生第一行。

最佳答案

在我看来,您只想保留纯文本表,而不是创建实际的(HTML-)表。如果是这种情况,您可以简单地将$VPLEX_Clusters放入<pre>标记中,而无需替换字符串:

...
$VPLEX_Clusters = [regex]::Matches($VPLEX, $regex) | % {$_.groups[1].value}
"<pre>$VPLEX_Clusters</pre>" | Out-File 'F:\Scripts\healthcheck\test.html'

如果要创建实际的 <table>,建议只提取不包含标题的数据行,将每一行拆分为一个数组并从中构建自定义对象:
$VPLEX_Clusters = @"
cluster-1 1 ok ok True False ok
cluster-2 2 ok ok True False ok
"@ -split "`n"

$VPLEX_Clusters | % {
$cluster = $_ -split ' +'
New-Object -Type PSCustomObject -Property @{
'Clustername' = $cluster[0]
'Cluster ID' = [int]$cluster[1]
'State' = $cluster[2]
'Health' = $cluster[3]
'Connected' = [convert]::ToBoolean($cluster[4])
'Expelled' = [convert]::ToBoolean($cluster[5])
'Local-com' = $cluster[6]
}
} | ConvertTo-Html -Fragment

编辑:除非必要,否则不要使用中间文件(提示:在这种情况下,您不必这样做)。替换为:
$VPLEX_Clusters | Out-File F:\Scripts\healthcheck\Vplex.txt
(gc F:\Scripts\healthcheck\Vplex.txt | select -Skip 5) | sc F:\Scripts\healthcheck\cluster1.txt

$Vcluster1 = [IO.File]::ReadAllText("F:\Scripts\healthcheck\cluster1.txt")

有了这个:
$Vcluster1 = $VPLEX_Clusters -split "`r`n" | select -Skip 5 |
? { $_ -notmatch '^\s*$' }

还要注意, ConvertTo-Html -Fragment仅创建一个HTML片段(准确地说,只是一个表),而不是整个HTML页面。如果要整个HTML页面:删除参数 -Fragment

编辑2:对象属性被指定为哈希表,其元素没有特定的顺序。如果希望按特定顺序排列列,则可以通过 select语句以所需顺序通过属性传递循环输出:
$html = $Vcluster1 | % {
$cluster = $_ -split ' +'
New-Object -Type PSCustomObject -Property @{
'Clustername' = $cluster[0]
'Cluster ID' = [int]$cluster[1]
'State' = $cluster[2]
'Health' = $cluster[3]
'Connected' = [convert]::ToBoolean($cluster[4])
'Expelled' = [convert]::ToBoolean($cluster[5])
'Local-com' = $cluster[6]
}
} | select 'Clustername', 'Cluster ID', 'State', 'Health', 'Connected',
'Expelled', 'Local-com' |
ConvertTo-Html -Fragment

如果您具有PowerShell v3或更高版本,则还可以将属性哈希表指定为 ordered hashtable:
$html = $Vcluster1 | % {
$cluster = $_ -split ' +'
$hash = [ordered]@{
'Clustername' = $cluster[0]
'Cluster ID' = [int]$cluster[1]
'State' = $cluster[2]
'Health' = $cluster[3]
'Connected' = [convert]::ToBoolean($cluster[4])
'Expelled' = [convert]::ToBoolean($cluster[5])
'Local-com' = $cluster[6]
}
New-Object -Type PSCustomObject -Property $hash
} | ConvertTo-Html -Fragment

关于html - 将空格转换为表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com