Contents of this directory is archived and no longer updated.

Summer Scripting Games 2009 Прыжки с шестом.

Beginner Division

Потребуется файл HighJumperDatabase.mdb из Competitors Pack.

Задача:

  • опросить MDB файл и вывести имя лучшего прыгуна c шестом (хотя там цифры немного странные для этой дисциплины).

Решение:

Никогда не приходилось работать с Access, поэтому пришлось честно гуглить: http://www.visualbasicscript.com/m_43134/tm.htm. Его я взял за основу, только немного подрихтовал и вот что получилось:

# создаём массив, который будет содержать все результаты
$sum = @()
# подключения к БД. Наглый копипаст с форума.# более-менее внятное описание этого кода тут:
# http://technet.microsoft.com/en-us/magazine/2009.05.scriptingguys.aspx
$adOpenStatic = 3
$adLockOptimistic = 3
$MDBConn = New-Object -comobject ADODB.Connection
$MDBConn.Open("provider=microsoft.jet.oledb.4.0;data source=$pwd\HighJumperDatabase.mdb")
$Record = New-Object -comobject ADODB.RecordSet
$Record.Open('select * from [High Jumper Data]',$MDBConn,$adOpenStatic,$adLockOptimistic)
$Record.MoveFirst()
do {
    # делаем объект текущего атлета и забиваем в него нужные значения
    $current = "" | Select @{n='Name';e={$Record.Fields.Item("Name").Value}},
    @{n='Personal Best';e={$Record.Fields.Item("Personal Best").Value}},
    @{n='Season Best';e={$Record.Fields.Item("Season Best").Value}}
    # добавляем текущего участника в массив
    $sum += $current
    # переходим на следующую итерацию
    $Record.MoveNext()
} until ($Record.EOF)
# закрываем все подключения
$Record.Close() 
$MDBConn.Close()
# сортируем и выводим лучшего спортсмена
$sum | Sort "Season Best", "Personal Best" | select Name -Last 1

Кстати, отличное решение этой задачи нашёл на VBS. Человек уложился в 4(!) строчки:

Set adoCon = CreateObject("ADODB.Connection")
adoCon.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=HighJumperDatabase.mdb"
Winner = adoCon.Execute("SELECT TOP 1 Name FROM [High Jumper Data] ORDER BY [Personal Best] DESC")("Name")
WScript.Echo "Expected Winner: " & Winner

Есть мнение, что фанаты PowerShell должны дружно застрелиться :-) хотя это просто вопрос запроса к базе Access.

Advanced Division

потребуется файл High Jump Stats_Adv4.txt из Competitors Pack.

В файле перечислены имена прыгунов с шестом и через запятую перечислены высОты планки.

Задача:

  • на основании этих данных построить произвольный (желательно красивы) график в Excel.

Решение:

Т.к. я графики тоже никогда не рисовал, поэтому тоже пришлось обратиться к гуглу. И вышло примерно такое:

# переименовываем txt файл в CSV. Теперь не нужно конвертировать тектовый файл в
# формат Excel, т.к. при переименовании Excel сам это сделает
ren "High Jump Stats_Adv4.txt" "High Jump Stats_Adv4.csv"
# выполняем обычную рутину для создания COM объекта для Excel
$excel = New-Object -ComObject excel.application
$file = $excel.Workbooks.Open("$pwd\High Jump Stats_Adv4.csv")# | Out-Null
$excel.Visible = $false
$excel.DisplayAlerts = $false
$sheet = $excel.Worksheets.Item(1)
# добавляем диаграмму
#$chart = $excel.Charts.Add()
# задаём диапазон для диаграммы
$Range = $sheet.Range("A1:l1")
# добавляем элемент Chart с нужным диапазоном. Я выбрал 10 первых попыток
# для первого атлета. 
$chart = $excel.Charts.Add()
$chart.SetSourceData($Range)
$chart.ChartStyle = 27
# сохраняем Chart в файл формата Excel и закрываем работу
$file.SaveAs("$pwd\High Jump Stats_Adv4.xlsx")
$excel.Quit()
gps excel | stop-process
# переименовываем CSV файл обратно в TXT
ren "High Jump Stats_Adv4.csv" "High Jump Stats_Adv4.txt"

Share this article:

Comments:

Comments are closed.