Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - скрипт для написания суммы прописью

Ответить
Настройки темы
PowerShell - скрипт для написания суммы прописью

Пользователь


Сообщения: 114
Благодарности: 13

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Function Amount {
param ($Argument)

 $Arg1 = @("", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ")
 $Arg2 = @("", "десять ", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
 $Arg3 = @("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
 $Arg4 = @("", "одна ", "две ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ")
 $Arg5 = @("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
 
 If ($Argument -le 0) {
    "ноль"
   break
 }

 $Units = Levels -Number $Argument -Degree 1 
 $Dozen = Levels -Number $Argument -Degree 2
 $Hundred = Levels -Number $Argument -Degree 3
 $Thousand = Levels -Number $Argument -Degree 4
 $Dozen_Thousand = Levels -Number $Argument -Degree 5
 $Hundred_Thousand = Levels -Number $Argument -Degree 6
 $millions = Levels -Number $Argument -Degree 7
 $Dozen_Millions = Levels -Number $Argument -Degree 8
 
 switch -Regex ($millions) {
        1 {$millions_text = $Arg1[$millions] + "миллион "}
   "[2-4]" {$millions_text = $Arg1[$millions] + "миллиона "}
  "[5-9]" {$millions_text = $Arg1[$millions] + "миллионов "}
     }

 switch -Regex ($Dozen_Millions) {
       1 {$millions_text = $Arg5[$millions] + "миллионов "; break}
  "[2-9]" {$Dozen_Millions_text = $Arg2[$Dozen_Millions]}
 }

switch -regex($Thousand){
     0 { If ($Dozen_Thousand -gt 0) { $Thousand_text = $Arg4[$Thousand] + "тысяч "}}
     1 {$Thousand_text = $Arg4[$Thousand] + "тысяча "}
  "[2-4]" {$Thousand_text = $Arg4[$Thousand] + "тысячи "}
  "[5-9]" {$Thousand_text = $Arg4[$Thousand] + "тысяч "}
 }
 
 switch -Regex ($Dozen_Thousand){
      1 {$Thousand_text = $Arg5[$Thousand] + "тысяч "; break}
"[2-9]" {$Dozen_Thousand_text = $Arg2[$Dozen_Thousand]}
}

 $Hundred_Thousand_text = $Arg3[$Hundred_Thousand]


 If (($Dozen_Thousand -eq 0) -And ($Thousand -eq 0) -And ($Hundred_Thousand -gt 0))
  {
  "тысяч"
  $Hundred_Thousand_text = $Hundred_Thousand_text + " тысяч "
  }


$Units_text = $Arg1[$Units]

switch -Regex ($Dozen){
        1 {$Units_text = $Arg5[$Units]}
  "[2-9]" {$Dozen_text = $Arg2[$Dozen]}
 }
 
 $Hundred_text = $Arg3[$Hundred]

 $Amount = $Dozen_Millions_text + $millions_text + $Hundred_Thousand_text + $Dozen_Thousand_text + $Thousand_text + $Hundred_text + $Dozen_text + $Units_text
 $Amount
} 


Function Levels {
param ($Number, $Degree)
[Math]::Floor([Math]::Floor($Number - ([Math]::Pow(10,$Degree)) * ([Math]::Floor($Number / ([Math]::Pow(10,$Degree))))) / ([Math]::Pow(10,$Degree-1)))
}
Авторство не мое, переписал с Excel. Может пригодится кому.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:51, 24-04-2015

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6494
Благодарности: 1466

Профиль | Отправить PM | Цитировать


Хороший скрипт, но небезупречный.

Код: Выделить весь код
amount "100297"
тысяч
сто  тысяч двести девяносто семь

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:43, 26-01-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
но небезупречный »
а... чего это, некропостим по-маленьку?
Код: Выделить весь код
function levels {
	#((n-10^k*(n//10^k))//(10^(k-1))
	param ([decimal]$number, [int]$degree)
	[decimal]::truncate(($number-([math]::pow(10,$degree))*
	[decimal]::truncate($number/[math]::pow(10,$degree)))/
	[math]::pow(10,$degree-1))
}

function Amount {
	param ([bigint]$argument)
	if($argument -lt -999999999999 -or $argument -gt 999999999999){
		return $argument
	} elseif ($argument -eq 0){
		return 'ноль'
	} elseif ($argument -lt 0){$argument=[bigint]::abs($argument);$m = 'минус '}
	
	$arg1 = @('','один ','два ','три ','четыре ','пять ','шесть ','семь ','восемь ','девять ')
	$arg2 = @('','десять ','двадцать ','тридцать ','сорок ','пятьдесят ','шестьдесят ',
	'семьдесят ','восемьдесят ','девяносто ')
	$arg3 = @('','сто ','двести ','триста ','четыреста ','пятьсот ','шестьсот ','семьсот ',
	'восемьсот ','девятьсот ')
	$arg4 = @('','одна ','две ','три ','четыре ','пять ','шесть ','семь ',
	'восемь ', 'девять ')
	$arg5 = @('десять ','одиннадцать ','двенадцать ','тринадцать ','четырнадцать ',
	'пятнадцать ','шестнадцать ','семнадцать ','восемнадцать ','девятнадцать ')

	$units = levels -n $argument -d 1 
	$dicker = levels -n $argument -d 2
	$hundred = levels -n $argument -d 3
	$thousand = levels -n $argument -d 4
	$dicker_thousand = levels -n $argument -d 5
	$hundred_thousand = levels -n $argument -d 6
	$millions = levels -n $argument -d 7
	$dicker_millions = levels -n $argument -d 8
	$hundred_millions = levels -n $argument -d 9
	$billions = levels -n $argument -d 10
	$dicker_billions = levels -n $argument -d 11
	$hundred_billions = levels -n $argument -d 12
	
	$units_t = $arg1[$units]
	switch -r ($dicker){
		1 {$units_t = $arg5[$units]}
		'[2-9]' {$dicker_t = $arg2[$dicker]}
	}
	$hundred_t = $arg3[$hundred]
	switch -r ($thousand){
		0 { if ($dicker_thousand -gt 0) { $thousand_t = $arg4[$thousand] + 'тысяч '}}
		1 {$thousand_t = $arg4[$thousand] + 'тысяча '}
		'[2-4]' {$thousand_t = $arg4[$thousand] + 'тысячи '}
		'[5-9]' {$thousand_t = $arg4[$thousand] + 'тысяч '}
	}
	switch -r ($dicker_thousand){
		1 {$thousand_t = $arg5[$thousand] + 'тысяч '; break}
		'[2-9]' {$dicker_thousand_t = $arg2[$dicker_thousand]}
	}
	$hundred_thousand_t = $arg3[$hundred_thousand]
	if (($dicker_thousand -eq 0) -and ($thousand -eq 0) -and ($hundred_thousand -gt 0)) {
		$hundred_thousand_t = $hundred_thousand_t + 'тысяч '
	}
	switch -r ($millions) {
		0{if($dicker_millions -gt 0){$millions_t=$arg1[$millions]+'миллионов '}}
		1 {$millions_t = $arg1[$millions] + 'миллион '}
		'[2-4]' {$millions_t = $arg1[$millions] + 'миллиона '}
		'[5-9]' {$millions_t = $arg1[$millions] + 'миллионов '}
	}
	switch -r ($dicker_millions) {
		1 {$millions_t = $arg5[$millions] + 'миллионов '; break}
		'[2-9]' {$dicker_millions_t = $arg2[$dicker_millions]}
	}
	$hundred_millions_t = $arg3[$hundred_millions]
	if (($dicker_millions -eq 0) -and ($millions -eq 0) -and ($hundred_millions -gt 0)) {
		$hundred_millions_t = $hundred_millions_t + 'миллионов '
	}
	switch -r ($billions) {
		0 {if($dicker_billions -gt 0){$billions_t=$arg1[$millions]+'миллиардов '}}
		1 {$billions_t = $arg1[$billions] + 'миллиард '}
		'[2-4]' {$billions_t = $arg1[$billions] + 'миллиарда '}
		'[5-9]' {$billions_t = $arg1[$billions] + 'миллиардов '}
	}
	switch -r ($dicker_billions) {
		1 {$billions_t = $arg5[$billions] + 'миллардов '; break}
		'[2-9]' {$dicker_billions_t = $arg2[$dicker_billions]}
	}
	$hundred_billions_t = $arg3[$hundred_billions]
	if (($dicker_billions -eq 0) -and ($billions -eq 0) -and ($hundred_billions -gt 0)) {
		$hundred_billions_t = $hundred_billions_t + 'миллиардов '
	}
	$amount = $m+$hundred_billions_t+$dicker_billions_t+$billions_t+$hundred_millions_t+
	$dicker_millions_t+$millions_t+$hundred_thousand_t+$dicker_thousand_t+$thousand_t+
	$hundred_t+$dicker_t+$units_t
	return $amount
}

amount $args[0]

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 27-01-2024 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6494
Благодарности: 1466

Профиль | Отправить PM | Цитировать


Да понадобилась функция, а времени на изобретение своего велосипеда не было.
Спасибо!

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 16:29, 27-01-2024 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
понадобилась функция »
Да, это тот же скрипт, модифицированный только уже, с увеличением максимумов и с отрицательными числами... тоже как-то понадобился, поковырял... но, не помню, довел ли я его "до ума", давно было дело... лучше перепроверить.

-------
scio me nihil scire. Ѫ


Отправлено: 16:46, 27-01-2024 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - скрипт для написания суммы прописью

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2003/XP/2000 - Сумма прописью для MS Word версии 2003 и выше Smolenkov_BN Microsoft Office (Word, Excel, Outlook и т.д.) 2 18-08-2013 18:23
RAID - RAID для написания музыки высокого разрешения (96kHz). Нужен совет sad1922 Накопители (SSD, HDD, USB Flash) 10 09-04-2011 23:58
Любой язык - Учебники по JavaScript для написания скриптов для Adobe Photoshop Lan-Laboratory Скриптовые языки администрирования Windows 1 26-05-2010 13:59
.NET - *SOFT* | C# vs PHP для написания небольших скриптов Vlad Drakula Программирование и базы данных 12 30-07-2006 23:25
Посоветуйте лучший редактор для написания сайта renat Вебмастеру 28 09-02-2005 17:51




 
Переход