gpt4 book ai didi

powershell - 从字符串输出格式化表格

转载 作者:行者123 更新时间:2023-12-02 23:08:37 25 4
gpt4 key购买 nike

我尝试了不同的方法,但是无法将数据格式化为表格

$str1 = "First string"
$str2 = "Sec string"
$str3 = "third str"
$str4 = "fourth string"

$str = "$str1 $str2 `r`n"
$str+= "$str3 $str4"

write-host $str | Format-Table

我希望创建如下输出:

First string  Sec string 
third str fourth string

最佳答案

为了按预期使用Format-Table,您需要具有属性的对象,而不仅仅是字符串:

$str -split "`r`n" | ForEach-Object {
# Initialize a custom object whose properties will reflect
# the input line's tokens (column values).
$obj = New-Object PSCustomObject; $i = 0
# Add each whitespace-separated token as a property.
foreach ($token in -split $_) {
Add-Member -InputObject $obj -NotePropertyName ('col' + ++$i) -NotePropertyValue $token
}
# Output the custom object.
$obj
} | Format-Table -HideTableHeaders
  • $str -split "`r`n"将多行字符串拆分为单独的行,并将它们通过管道一一发送。
  • ForEach-Object命令从每行构造一个自定义对象,其属性是该行上用空格分隔的标记,如注释中所述;属性名称-与输出无关紧要-自动生成为col1col2,...
  • 注意:这与中的每个空格(空白行)都被视为分隔符完全不匹配您所需的输出。如果您想将每个原始$str1$str2,...变量值(例如First string)都视为一个单独的列值,则必须假设如何标记该行。
    例如,如果假设是两个连续的单词构成一个单个值,则为,将上面的-split $_替换为$_ -split '(\w+ \w+) ?' -ne ''
  • 如果您不想依赖的假设,则必须用嵌入的引号构造您的输入字符串,以便明确指示 token 边界(然后必须修改代码以正确解析嵌入的引号)。
  • 然后,
  • Format-Table以表格形式显示自定义对象,并正确对齐各列; -HideTableHeaders禁止显示标题行(自动生成的属性名称)。

  • 使用示例输入,上面的代码将产生以下内容,这些代码不使用-HideTableHeaders生成,以便更好地说明代码的作用:

    col1  col2   col3   col4
    ---- ---- ---- ----
    First string Sec string
    third str fourth string

    同上,但具有2个连续单词的分割逻辑:

    col1         col2
    ---- ----
    First string Sec string
    third str fourth string

    至于你尝试了什么:
  • 不要使用Write-Host产生数据输出:Write-Host输出(默认情况下)进入控制台并绕过管道,因此Format-Table在此不接收任何输入,也没有任何作用。
  • 就是说,即使Format-Table确实收到了输入(通过单独使用$str,而没有Write-Host,即:$str | Format-Table),也不会对字符串产生任何(可见)影响,这些字符串始终按原样呈现。
  • 关于powershell - 从字符串输出格式化表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51177349/

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