2017-10-20 111 views
0

我希望捕獲.csv文件中的無效字符。目前我只能捕捉到所有不是英文的無效字符,還有無法識別除英文以外的所有無效字符。& 德國無效字符選擇字符串(適用於德國語言)

以下代碼可以過濾非英文字母的無效字符。

$path = "product.csv" 

$a = Get-Content $path | Select-String -AllMatches -Pattern "[^\x00-\x79]" | Select-Object LineNumber,Line,@{Name='String';Expression={$_.Matches.Value}} 
$b = $a.count 

$a 
Write-Host "Total: $b" 

所有德國人名中包含的字符都計爲有效字符。

+0

如果您想檢查文件路徑中的無效字符,請查看[GetInvalidFileNameChars()](https://stackoverflow.com/questions/23066783/how-to-strip-illegal-characters-before-trying-to -save-filenames) –

+0

對不起,我忘了提到,這個獲取內容是讀取.csv文件的內容,而不是文件名。 –

+0

這是故意的,你允許字符「[]」而不是「{}」? –

回答

1

最簡單的方法是將德文特定字符的十六進制文字添加到匹配組中。您正在查找的字符是:

ß \xdf 
Ü \xdc 
ü \xfc 
Ä \xc4 
ä \xe4 
Ö \xd6 
ö \xf6 

所以,你的新的匹配組將是:

-Pattern "[^\x00-\x79\xdf\xdc\xfc\xc4\xe4\xd6\xf6]" 

編輯:

作爲替代由自己的代碼匹配字符點你可以還可以使用的實際字符在匹配模式:

-Pattern "[^a-zA-ZäÄöÖüÜß]" 

它更易於閱讀,並且不包括您在上面匹配的\x00\x21之間的所有這些非人類可讀的控制字符。

+0

您好Manuel Batsching,我在網上搜索有超過7個德語字符[鏈接](https://www.alt-codes.net/german_alt_codes/)。那麼你提供的比賽組是否都是正確的或者還有更多的德語角色需要添加?我可能知道你是如何得到十六進制值的?有沒有任何資源可以查看完整列表?我稍後可能需要進一步繼續檢查另一種語言,例如中文,韓文。謝謝 –

+0

爲什麼十六進制轉義? – Tomalak

+0

@YongCai作爲一個德國人,我可以確保你,這7個額外的字符,你發現不使用德文字母。 –