【发布时间】:2020-02-27 23:12:34
【问题描述】:
我正在尝试使用 Powershell 解析 csv 文件,但拆分功能不起作用。我正在使用拆分和原始行比较文件输出。拆分仅适用于前几行。我不知道我是否遗漏了什么。这是我的代码
$table = Get-Content .\random.csv -ReadCount 1000
$fname_mid = 'ps.mid'
$fname_mif = 'ps.mif'
New-Item -Path . -Name $fname_mid -ItemType 'file' -Force
New-Item -Path . -Name $fname_mif -ItemType 'file' -Force
ForEach($_ In $table)
{
$read_field = $_ -split ','
$read_line = '----' + $read_field[0] + ',-' + $read_field[9] + '-'
$read_line | Out-File -Encoding 'UTF8' -FilePath $fname_mid -Append
$_ | Out-File -Encoding 'UTF8' -FilePath $fname_mif -Append
}
测试文件https://www.dropbox.com/s/99zgerh2akemgy3/random.csv?dl=0
【问题讨论】:
-
this >>>
ForEach($_ In $table)$_ 变量是 current pipeline item ...并且您没有使用该管道。将其替换为适当的当前项目变量 [也许是$T_Item] 并看看会发生什么。 -
-ReadCount指定一次通过管道发送多少行内容。因此,$Table.Count=> 40 和$Table[0].Gettype()=>Object[]和($Table[0] -split [System.Environment]::NewLine).Count=> 1000 和($Table[-1] -split [System.Environment]::NewLine).Count=> 233。 -
你为什么不使用 Import-csv?如果是普通的 csv,这将是简单的方法。
-
@WalterMitty 因为文件大小大于 10MB 时速度很慢
-
当您通过管道提供其输出时,它的工作速度会更快。
标签: powershell csv split