Прыжки с шестом.
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"