gpt4 book ai didi

powershell - 将哈希表导出为CSV

转载 作者:行者123 更新时间:2023-12-03 01:03:53 24 4
gpt4 key购买 nike

我正在尝试编写一个Powershell脚本,该脚本将使用几个很长的空格分隔的文件,并将某些列导出到名称相似的CSV文件。

我确实有一个成功的版本:

Foreach ($file in $files) {
$WriteString=""
$outfile = $path + "\" + ($file -replace ".{4}$") + ".csv"

Get-Content -Path $path"\"$file | Select-Object -Skip $lines | ForEach-Object{
$ValueArray = ($_ -split "\s+")
$WriteString += $ValueArray[1] + "," + $ValueArray[2] + "," + $ValueArray[3] + "`n"
}

Add-Content -Path $outfile -Value $Writestring
}

这可以工作,但是非常慢-脚本完全运行需要16个小时以上。 (我认为)主要原因是添加到字符串中。我尝试使用哈希表来改善此问题:
Foreach ($file in $files) {
$outfile = $path + "\" + ($file -replace ".{4}$") + ".csv"

$ParseLines = Get-Content -Path $path"\"$file | Select-Object -Skip $lines

$OutputData = ForEach ($Line in $ParseLines) {
$ValueArray = ($Line -split "\s+")
$Line | Select-Object $ValueArray[1], $ValueArray[2], $ValueArray[3]
}

$OutputData | Export-CSV -Path $outfile #-NoTypeInformation
}

但是,这仅导出哈希表的一行:
#TYPE Selected.System.String
"636050.000","7429825.000","77.438"
,,
,,
,,
,,
,,
,,

如果我将最后一行更改为:
Set-Content -Path $outfile -Value $OutputData

然后输出变为:
@{636050.000=; 7429825.000=; 77.438=}
@{636075.000=; 7429825.000=; 75.476=}
@{636100.000=; 7429825.000=; 74.374=}
@{636125.000=; 7429825.000=; 73.087=}
@{636150.000=; 7429825.000=; 71.783=}
@{636175.000=; 7429825.000=; 70.472=}

我显然对哈希表或Export-CSV做错了,但我无法弄清楚。任何帮助将不胜感激。

按照下面的要求,这是一个源文件的一部分。我剪切了所有非数据行,并且在输出CSV中不包含标题,因为输入程序(CSV文件进入)不需要它们,并且输出是不言而喻的(没有太多机会仅通过查看数据就可以弄错X,Y和Z值)。
*
* DEFINITION
* HEADER_VARIABLES 3
* QUALITIES C 16 0 key
* DATE C 12 0
* TIME C 12 0
* VARIABLES 4
* X F 12 3
* Y F 12 3
* Z F 12 3
* gcmaq0.drg F 12 3
*
* 1 2 3 4
*23456789012345678901234567890123456789012345678
* X| Y| Z| gcmaq0.drg|
*
* HEADER:QUALITIES 29Aug2018 13:53:16
636575.000 7429800.000 75.551 75.551
636600.000 7429800.000 77.358 77.358
636625.000 7429800.000 78.823 78.823
636650.000 7429800.000 80.333 80.333
636675.000 7429800.000 82.264 82.264
636700.000 7429800.000 84.573 84.573
636725.000 7429800.000 87.447 87.447

最佳答案

避免慢速操作,例如在循环中追加到字符串(或数组)。更改此:

Get-Content -Path $path"\"$file |
Select-Object -Skip $lines |
ForEach-Object {
$ValueArray = ($_ -split "\s+")
$WriteString += $ValueArray[1] + "," + $ValueArray[2] + "," + $ValueArray[3] + "`n"
}

Add-Content -Path $outfile -Value $Writestring

到这个:
Get-Content -Path "${path}\${file}" |
Select-Object -Skip $lines |
ForEach-Object {
($_ -split "\s+")[1..3] -join ','
} |
Set-Content -Path $outfile

如果您确实想附加到现有文件,请用 Set-Content替换 Add-Content

关于powershell - 将哈希表导出为CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087539/

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