0
我写了一个函数和过滤器来分析CSV文件的内容。功能中指定的参数自动传递给过滤器
函数来创建列对象的管道:
function Analyze {
[CmdletBinding()]
Param(
[String]
$File
)
# get column headers from CSV; enumerate
$Headers = (Get-Content $File | Select-Object -First 1).Split(',')
$Headers | ForEach-Object {
# create an object that represents each column; initialize values
$Column = [PsCustomObject]@{'Name'=$_;'Measurements'[email protected]()}
# add to pipeline
$Column
}
}
过滤器来计算各列的内容的最小值:
filter Min {
Param(
[string]$File
)
# create Logparser query
$Query = "SELECT Min($($_.Name)) AS Minimum FROM '$File'"
# excute query; return results as XML
[xml] $xml = & logparser $Query -stats:off -o:xml
# create object to contain measurement and its value
$Measurement=[PsCustomObject]@{'Name'='Minimum';Value=$xml.root.row.Minimum.Trim()}
# add to collection and return to pipeline
$_.Measurements+=$Measurement
$_
}
过滤器来计算各列的内容的最小值:
filter Max {
Param(
[string]$File
)
# create Logparser query
$Query = "SELECT Max($($_.Name)) AS Maximum FROM '$File'"
# excute query; return results as XML
[xml] $xml = & logparser $Query -stats:off -o:xml
# create object to contain measurement and its value
$Measurement=[PsCustomObject]@{'Name'='Maximum';Value=$xml.root.row.Maximum.Trim()}
# add to collection and return to pipeline
$_.Measurements+=$Measurement
$_
}
用法:
pushd C:\users\<user>\Desktop
$File = '.\d.csv'
Analyze -File $File | Min -File $File | Max -File $File
popd
有没有办法建筑师这样的过滤器,我可以把它想:
pushd C:\users\<user>\Desktop
Analyze -File '.\d.csv' | Min | Max
popd
您可以通过'Analyze'函数将文件属性添加到对象。 – PetSerAl
@PetSerAl,我认为,但它看起来像一个黑客。也许这是唯一的方法... – craig
如果您希望下一个函数使用它,您必须以某种方式返回到管道。 – Matt