【问题标题】:Outputting data separated by tabs to text file将制表符分隔的数据输出到文本文件
【发布时间】:2023-04-02 09:27:01
【问题描述】:

我有一堆 xml 文件,在每个文件中可能有多个变体(不同的语言区域设置代码 en-us、en-ca、en-gb 等)我是 powershell 新手,所以我可能不了解几个概念。

我可以提取所有这些信息,但无法以我想要的格式输出。我尝试过使用Out-File 并查看了Export-Csv,但我无法让它做我想做的事。任何帮助将不胜感激。

这是我想要的格式(内容会复制到Excel中)

File Path  |  ar-ae  |  ar-sa  |  cs-cz  |  da-dk
File 1         X        X                 X
File 2         X        X        X        X
File 3                  X         

所以基本上我想要一个表头是文件路径和每种语言代码。然后,我想列出所有文件,并在文件中存在的每个语言环境下放置一个 X。

这是我的代码

if (Test-Path ".\siteIA.txt") {
Clear-Content ".\siteIA.txt"
}

$locales = @(
"ar-ae"
"ar-sa"
"cs-cz"
"da-dk"
"de-at"
"de-ch"
"de-de"
"el-gr"
"en-au"
"en-ca"
"en-gb"
"en-hk"
"en-ie"
"en-in"
"en-nz"
"en-sg"
"en-us"
"en-za"
"es-ar"
"es-cl"
"es-co"
"es-es"
"es-mx"
"fi-fi"
"fr-be"
"fr-ca"
"fr-ch"
"fr-fr"
"he-il"
"hu-hu"
"it-it"
"ja-jp"
"ko-kr"
"nb-no"
"nl-be"
"nl-nl"
"pl-pl"
"pt-br"
"pt-pt"
"ru-ru"
"sk-sk"
"sv-se"
"tr-tr"
"zh-hk"
"zh-tw"
)

$locales = $locales | sort

$header = "Path`t" + $locales

Get-ChildItem C:\Users\tests *.xml -recurse | 
% { 
    $outArray = @()
    $file = [xml](Get-Content $_.fullname)

    $path = $file.ExportedContentItem.path
    $name = $file.ExportedContentItem.name
    $availableLocales=@()

    $out = $path + "/" + $name + "`t"

    $file.ExportedContentItem.ContentItem.Variant | % { 
        $availableLocales += $_.variantCulture
    }

    $availableLocales = $availableLocales | sort

    foreach ($locale in $locales){
        if ($availableLocales -contains $locale){
            $out = "X"
            Add-Content ".\siteIA.txt" "X`t"
        } else {
            $out = ""
            Add-Content ".\siteIA.txt" "`t"
        }       
    }

    Add-Content ".\siteIA.txt" "T"
    Add-Content ".\siteIA.txt" "E"
    Add-Content ".\siteIA.txt" "S"

}

【问题讨论】:

  • 那么在当前代码中什么不起作用?

标签: powershell format output


【解决方案1】:

如果您想稍后将输出导入 Excel,最好创建一个 TSV(制表符分隔值)文件。 Export-Csv cmdlet 可以为您做到这一点。

使用File Path 和语言环境作为属性创建自定义对象,并将名称在Variant 节点中列出的所有属性设置为X。然后使用制表符作为分隔符导出对象:

Get-ChildItem C:\Users\tests *.xml -recurse | % {
  $contentItem = [xml](Get-Content $_.FullName).ExportedContentItem

  $o = New-Object -Type PSObject -Property @{
    'File Path' = Join-Path $contentItem.Path $contentItem.Name
    'ar-ae'     = ''
    'ar-sa'     = ''
    ...
    'zh-hk'     = ''
    'zh-tw'     = ''
  }

  $contentItem.ContentItem.Variant | % {
    $o."$($_.variantCulture)" = "X"
  }

  $o
} | Export-Csv 'C:\path\to\output.txt' -NoType -Delimiter "`t"

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多