Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Подсчет символов разных языков в мультиязычных файлах (http://forum.oszone.net/showthread.php?t=324489)

nkaretnikov 05-03-2017 14:49 2716908

Подсчет символов разных языков в мультиязычных файлах
 
Здравствуйте!
Как получить количество, скажем, русских символов в двуязычной строке
Пример
‘строкасодержащаяenglishsymbol’.lenRU и результат 15
‘строкасодержащаяenglishsymbol’.lenEN и результат 13

В идеале скрипт должен считать количество символов каждого языка в мультиязычных файлах, но эту часть я знаю как создать, а о подсчет спотыкаюсь

Kazun 05-03-2017 15:05 2716917

Код:

([char[]]'строкасодержащаяenglishsymbol' -match "[а-я]").count

Iska 05-03-2017 15:13 2716919

Токмо шаблон чуть ширше — [а-яё], поскольку ё выпадает за границы от а до я.

greg zakharov 05-03-2017 17:02 2716949

Цитата:

Цитата Iska
Токмо шаблон чуть ширше — [а-яё], поскольку ё выпадает за границы от а до я.

А еще лучше \p{IsCyrillic}. Почему? Есть вероятность, что при задании шаблона [а-яё] может быть введена латинская a, и тогда, например, в строке 'съеш ещё этих мягких французских булок, да выпей чаю! /dev/null' итог будет равным 50, а не 43 как положено, поэтому использование \p{IsCyrillic} более предпочтительно.

Nikolay_Karetnikov@vk 05-03-2017 17:04 2716950

Вложений: 1
Спасибо!


Код:

$lines = Get-Content 'C:\powershell\in.txt'
$len = $lines.length


выдает $len=3 на вложенном файле.

Как это? Вроде ожидать надо количество символов, а не строк :)

greg zakharov 05-03-2017 17:07 2716952

Дык если в файле три строки, что Вы ожидаете увидеть, десять? Get-Content по уолчанию считвает файл как массив строк, отсюда и количество строк, а не символов.

Nikolay_Karetnikov@vk 05-03-2017 17:08 2716953

Символы нужны :)
По строкам считать в цикле или есть проще способ?

greg zakharov 05-03-2017 17:10 2716954

Ну дык используйте measure:
Код:

Get-Content in.txt | Measure-Object -Character

Nikolay_Karetnikov@vk 05-03-2017 17:14 2716956

Круть! )
Как это совместить теперь с -match "[а-я]"?
Код:

$lines = Get-Content 'C:\powershell\in.txt'
$len = $lines.length
$lenRU = ($lines -match "[а-я]") | Measure-Object -Character
$len = $lines.length

Получилось! Осталось только сообразить как считать не символы в строках, содержащих русские буквы, а именно количество букв

Iska 05-03-2017 17:28 2716958

Цитата:

Цитата greg zakharov
Есть вероятность, что при задании шаблона [а-яё] может быть введена латинская a, »

Ну, это навряд ли.

Указанное Вами идеологически более верное — вроде как факт. Но дело в том, что туда попадут все символы из набора 0400 - 04FF, т.е.:
Скрытый текст

а не только буквы русского алфавита от а до я. А оно нам надо? Вопрос риторический.

Kazun 05-03-2017 17:28 2716959

Код:

([char[]](gc in.txt -raw) -match "[а-я]").Count

Nikolay_Karetnikov@vk 05-03-2017 17:36 2716962

а если

Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1

и

Get-Content : Не удается найти параметр, соответствующий имени параметра "raw"

?

Kazun 05-03-2017 17:37 2716964

Код:

([IO.File]::ReadAllText("C:\in.txt").ToCharArray() -match "[а-я]").Count

Nikolay_Karetnikov@vk 05-03-2017 17:39 2716966

И отлить в металле! :)
Спасибо большое!


Время: 10:02.

Время: 10:02.
© OSzone.net 2001-