четверг, 6 марта 2008 г.

Scripting Games 2008 - Adv_Event_4

Один из моих скриптов посланных на конкурс...
Раздел Advanced PowerShell - Event-4
Может он не так короток как у других - но я уверен, что в итоге получается красивый вид и плюс есть изюминка - выделяются праздники (я тещу свое самолюбие - что до этого догадался только я :).
Самое главное тут было найти дату начиная с которой выводить календарь.

param([String] $DStr)

$CelebDate = "01/01","01/07","02/23","03/08",`

             "05/01","05/02","05/09","11/04","12/31"

if ($DStr -eq $null -or $DStr -eq "")

{$D=[DateTime]::Now.Date} else {$D=[DateTime]$DStr}

$Celeb= $CelebDate | % {[DateTime]"$_/$($D.Year)"}

$Last=$false

$DD=$D.AddDays(-$D.Day+1)

$Beg=$DD.AddDays(-[int]$DD.DayOfWeek)

$End=$DD.AddDays([DateTime]::DaysInMonth($D.Year,$D.Month)-1)

$S=("{0:MMMM, yyyy}" -f $D).Length

$C=21/2-$S/2

Write-Host (" "*$C+("{0:MMMM}, " -f $D)) -Fore Blue -No

Write-Host ("{0:yyyy}" -f $D) -Fore Yellow

Write-Host "---------------------" -Fore DarkBlue

Write-Host " Su " -Fore Red -No

Write-Host "Mo Tu We Th Fr " -Fore Cyan -No

Write-Host "Sa" -Fore DarkRed

Write-Host "---------------------" -Fore DarkBlue

$DDD=$Beg

while(!$Last)

{

  for($I=0;$I -lt 7;$I++)

  {

    $Str=$DDD.Day.ToString().PadLeft(3," ")

    $Last=$DDD -ge $End

    if ($DDD.DayOfWeek -eq 0) {$Color="Red"}

    elseif ($DDD.DayOfWeek -eq 6) {$Color="DarkRed"}

    else {$Color="White"}

    if ($DDD -lt $DD -or $DDD -gt $End) {$Color="Gray"}

    if ($Celeb -contains $DDD) {$Color="Magenta"}

    if ($DDD -eq $D) {$Color="Green"}

    Write-Host $Str -Fore $Color -No

    $DDD=$DDD.AddDays(1)

  }

  ""

}

Вот как при этом выглядит календарик в консоли:

Комментариев нет: