powershell - 解析文本文件或 html 文件以创建表格
问题描述
我对来自 Outlook 的 .msg 文件有一个简单的问题,但我发现有人帮助我的代码无法正常工作,因为 .msg 文件中的 htmlbody 在不同的电子邮件之间会有所不同,即使它们来自相同的来源,所以我的下一个选择是将电子邮件另存为 .txt 和 .html 文件,因为我不了解 html 我不知道如何获取以 .html 为结构的表格。但在文本中我发现了一些简单的东西,例如这是来自一个表的数据:
Summary
Date
Good mail
Rule matches
Spam
Malware
2019-10-22
4927
4519
2078
0
2019-10-23
4783
4113
1934
0
这是在文本文件上,Summary 是关键字,在该关键字之后,接下来的 5 行是表格的列,之后每 5 行是行,总共最多 7 行,所以标题,然后是 7 行。
现在我要做的是使用摘要后的前 5 行作为我的列从该文本创建一个表。由于每个 .msg 都不同,这 5 列将随机更改每个文件的顺序,所以我想避免这种情况,我最好的尝试是使用 convertfrom-string 创建一个表,但我不知道如何格式化表上面设定的条件。
我遇到的问题就是这么简单,我在上面显示的txt文件上有一个表格,有5列,除了标题之外的每一列都包含7行,还有一个条件是电子邮件因为它有更多的数据,我需要停在那里,只抓住应该很容易的部分。
如何使用 convertfrom-string 使用这 5 列创建表,如何将分隔符设置为新行,如何将前 5 行设置为列标题?
解决方案
我认为尝试完成这项工作ConvertFrom-StringData
会增加不必要的工作量。但这里有一个适用于您的样本集的替代方案。
$text = Get-Content -Path File.txt
$formattedText = if ($text[0] -match '^Summary') {
for ($i = 1; $i -lt $text.count; $i+=5 ) {
$text[$i..($i+4)] -join ','
}
}
$fomattedText | ConvertFrom-Csv | ConvertTo-Html
解释:
如果我们假设您的文本数据在 中File.txt
,则Get-Content用于将数据作为数组 ( $text
) 读取。如果第一行以 开头Summary
,则文件将被解析。
该for
循环用于在每次迭代期间跳过 5 行,直到文件结束。for
循环以由 a 连接在一起的$text
值(索引 1、2、3、4 和 5)开始,
。然后索引增量 ( $i
) 增加 5 并将接下来的五个索引值连接在一起。每个增量将创建一个新的逗号分隔值行。加入的原因,
只是为了ConvertFrom-Csv
后面使用简单。
ConvertFrom-Csv
将 CSV 数据转换为对象数组 ( $formattedText
),第一行成为这些对象的属性。
最后,数组通过管道传送到ConvertTo-Html,它将输出表中的所有对象。
注意:如果您想调整表格的大小或向表格添加额外的格式,您可能需要在生成代码后执行此操作。如果您的数据有逗号,则在连接字符串时将需要不同的分隔符。然后,您需要使用您选择的分隔符将-Delimiter
参数添加到。ConvertFrom-Csv
适应:
代码相当灵活。如果您需要处理超过五个属性,$i+=5
则需要反映您需要循环访问的属性数量。相同的更改需要适用于$text[$i..($i+4)]
. 您希望..
分隔两个因您的属性编号而异的值。
推荐阅读
- python - Snakemake 声明规则以非零退出代码退出,即使使用“|| true”?
- json - oetl.sh 错误:不支持输入类型:: 类 java.lang.Integer [OETLOrientDBLoader]
- java - 单击按钮时如何连续使用编辑文本获取输入,删除编辑文本中的前一个值
- firebase - 使用 FLUTTER_NOTIFICATION_CLICK 时,Flutter 的 Firebase 云消息的数据有效负载中的 ID 和状态选项是什么?
- javascript - 我已经在 innerHTML 中计算了距离和时间,但我无法使用文本框中的 id 传递它。我该如何解决?
- powershell - 为什么 ManufacturerName 和 UserFriendlyName 不完整?
- unity3d - Spherecasting 没有击中我想要的位置
- css - 为什么我的 cpanel 或网站没有使用我刚刚添加的新 css 文件?
- flutter - 在列表视图中更改图标的颜色
- git - 为什么 git log 在修改旧评论后不显示更改,?