Показать полную графическую версию : [решено] Подсчет символов разных языков в мультиязычных файлах
nkaretnikov
05-03-2017, 14:49
Здравствуйте!
Как получить количество, скажем, русских символов в двуязычной строке
Пример
‘строкасодержащаяenglishsymbol’.lenRU и результат 15
‘строкасодержащаяenglishsymbol’.lenEN и результат 13
В идеале скрипт должен считать количество символов каждого языка в мультиязычных файлах, но эту часть я знаю как создать, а о подсчет спотыкаюсь
([char[]]'строкасодержащаяenglishsymbol' -match "[а-я]").count
Токмо шаблон чуть ширше — [а-яё], поскольку ё выпадает за границы от а до я.
greg zakharov
05-03-2017, 17:02
Токмо шаблон чуть ширше — [а-яё], поскольку ё выпадает за границы от а до я.А еще лучше \p{IsCyrillic}. Почему? Есть вероятность, что при задании шаблона [а-яё] может быть введена латинская a, и тогда, например, в строке 'съеш ещё этих мягких французских булок, да выпей чаю! /dev/null' итог будет равным 50, а не 43 как положено, поэтому использование \p{IsCyrillic} более предпочтительно.
Nikolay_Karetnikov@vk
05-03-2017, 17:04
Спасибо!
$lines = Get-Content 'C:\powershell\in.txt'
$len = $lines.length
выдает $len=3 на вложенном файле.
Как это? Вроде ожидать надо количество символов, а не строк :)
greg zakharov
05-03-2017, 17:07
Дык если в файле три строки, что Вы ожидаете увидеть, десять? Get-Content по уолчанию считвает файл как массив строк, отсюда и количество строк, а не символов.
Nikolay_Karetnikov@vk
05-03-2017, 17:08
Символы нужны :)
По строкам считать в цикле или есть проще способ?
greg zakharov
05-03-2017, 17:10
Ну дык используйте measure:
Get-Content in.txt | Measure-Object -Character
Nikolay_Karetnikov@vk
05-03-2017, 17:14
Круть! )
Как это совместить теперь с -match "[а-я]"?
$lines = Get-Content 'C:\powershell\in.txt'
$len = $lines.length
$lenRU = ($lines -match "[а-я]") | Measure-Object -Character
$len = $lines.length
Получилось! Осталось только сообразить как считать не символы в строках, содержащих русские буквы, а именно количество букв
Есть вероятность, что при задании шаблона [а-яё] может быть введена латинская a, »
Ну, это навряд ли.
Указанное Вами идеологически более верное — вроде как факт. Но дело в том, что туда попадут все символы из набора 0400 - 04FF, т.е.:
http://i.imgur.com/tQerTvE.png
а не только буквы русского алфавита от а до я. А оно нам надо? Вопрос риторический.
([char[]](gc in.txt -raw) -match "[а-я]").Count
Nikolay_Karetnikov@vk
05-03-2017, 17:36
а если
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
и
Get-Content : Не удается найти параметр, соответствующий имени параметра "raw"
?
([IO.File]::ReadAllText("C:\in.txt").ToCharArray() -match "[а-я]").Count
Nikolay_Karetnikov@vk
05-03-2017, 17:39
И отлить в металле! :)
Спасибо большое!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.