下面是一个场景:我有一系列不同语言的文件,我需要弄清楚其中哪个是英语。我的想法是创建一个单词数组,然后逐个检查文件中是否出现了这些单词。最后,我将每个单词的出现加在一起。如果总数足够高,我假设文件是英文的。
在进行了一些创造性的谷歌搜索之后,我一开始是这样做的:
[System.Array]$Words = ' the ',' this ',' in ',' you ',' of ',' are ','music'
[System.String]$Content = Get-Content -Path <FileName>
ForEach ($Word in $Words) {
$Count = [RegEx]::Matches($Content,[RegEx]::Escape($Word)).Count
Write-Output -InputObject "$Word : $Count"
}这表明它至少起作用了:
the : 172
this : 14
in : 52
you : 95
of : 61
are : 18
music : 0那我接下来要去哪?
我考虑使用[System.Int32]$Hits = 0和$Hits++将它们全部添加到一起。只是想弄清楚怎么做。
而且,当我使用Notepad++检查同一个文件时,会得到不同的计数,奇怪的是。我做错了什么吗?
发布于 2017-05-20 18:58:25
而不是输出一个字符串,输出一个对象并将它们存储在一个变量中!
$stringCounts = foreach ($Word in $Words) {
$Count = [RegEx]::Matches($Content,[RegEx]::Escape($Word)).Count
New-Object psobject -Property @{
Word = $Word
Count = $Count
}
}现在,您可以使用Measure-Object轻松地获得单个计数的总和。
$TotalCount = ($stringCounts |Measure-Object Count -Sum).Sumhttps://stackoverflow.com/questions/44089636
复制相似问题