以下是该方案: 我有一系列不同语言的文件,我需要弄清楚哪些是英文。 我的想法是创建一个单词数组,然后逐个检查文件中是否出现这些单词。最后,我将每个单词的出现加在一起。如果总数足够高,我会假设该文件是英文。
经过一些有创意的谷歌搜索后,我开始说:
[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 ++检查同一个文件时,我得到了不同的计数,奇怪的是。我做错了吗?
答案 0 :(得分:3)
输出对象并将其存储在变量中,而不是输出字符串!
$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).Sum