我在网站上找到了这段代码,可以在PowerShell中找到DataTable中列的最大长度。这是代码:
$columns = ($datatable | Get-Member -MemberType Property).Name
foreach($column in $Columns) {
$max = 0
foreach ($a in $datatable){
if($max -lt $a.$column.length){
$max = $a.$column.length
}
}
$output = New-Object psobject
$output | Add-Member NoteProperty Column ($column)
$output | Add-Member NoteProperty Max ($max)
Write-Output $output
}
它确实找到了列中的最大长度,但是它给了我这个结果:
Column Max
A 3
A 4
A 5
B 10
C 19
C 29
D 9
该文件只有4列,大约有300k +行 Max中最大的值是列中的实际最大字符数,结果将导出为csv文件,然后有其他用途。所以我没有在csv文件中添加那些额外的行。
循环出了什么问题?
谢谢
编辑:
这是代码的其余部分:
$FileHeaders = @( (Get-Content $files -first 1).Split($delimiter) )
#take out all the nonword/number character in header
$CleanHeaders = @(($FileHeaders.Split("$delimiter") -replace "[^a-zA-Z0-9_]", "").ToLower())
$readfiles = Get-Item $files
#create the streamreader
$reader = New-Object -TypeName System.IO.StreamReader -ArgumentList ($readfiles)
#create a data table
$datatable = New-Object -TypeName System.Data.DataTable
#insert the header to the columen headers
foreach ( $CleanHeader in $CleanHeaders ) {
[void]$datatable.Columns.Add($CleanHeader)
}
$reader.ReadLine() > $null
#call the streamreader to read the files
while ( $reader.Peek() -ge 0 ) {
$line = $reader.ReadLine()
#import the data into the table
[void]$datatable.Rows.Add($line.Split($delimiter))
}
$ files和$ delimiter已定义。