Операционные системы / Лаб 7
.docМинистерство образования и науки Российской Федерации
Федеральное агентство по образованию
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Лабораторная работа №7
«Операционные системы, среды и оболочки»
Выполнили:
Студентки группы ФБИ – 22
Преподаватель:
Эстрайх И.В.
Новосибирск 2014
Взаимодействие между сложными объектами Windows на VBScript/JScript
Создала с помощью программы "Блокнот" структурированный файл XML data1.xml, который содержит информацию о предметах и итоговых оценках по семестрам в каждой из изученных студентами дисциплин. Ограничилась списком студентов одной группы, занеся в файл информацию по нескольким различным предметам с разнообразным видом итоговой оценки (зачет, курсовая, экзамен и т. д.). Создала сценарий script1.vbs, выполняющий чтение из XML-файла data1.xml информации о студентах и организовывающий ее вывод в программу WORD. Предварительно создала шаблон документа, содержащий шапку и таблицу.
В итоге получаем скрипт script1.vbs следующего содержания:
Dim WSS, RootPath, DocXML, root, ObjWord, DocWord, ObjDocs, Sel, node, I
Set WSS = WScript.CreateObject("WScript.Shell")
RootPath = WSS.CurrentDirectory
REM Создаём объект XML документа.
Set DocXML = WScript.CreateObject ("Msxml.DOMDocument")
REM Загружаем его.
Tr = DocXML.load(RootPath + "\data1.xml")
If (Tr = False) then
WScript.Echo "Ошибка загрузи XML документа!"
WScript.Quit
End if
' Создаём объект MS Word.
Set ObjWord = WScript.CreateObject("Word.Application")
Set ObjDocs = ObjWord.Documents
Set DocWord = ObjDocs.Open(RootPath + "\doc.docx")
Set Sel = ObjWord.Selection
ObjWord.Visible = true
set root = DocXML.documentElement / обращаемся к эелементу
DocWord.Bookmarks("bkm2").Select()
I = 1
For Each node In root.childNodes
Sel.TypeText(cStr(I))
Sel.MoveRight(12)
Sel.TypeText(GetTagVal(node, "ФИО"))
Sel.MoveRight(12)
Sel.TypeText(GetTagVal(node, "Номер_зачетки"))
Sel.MoveRight(12)
' Пишем количество предметов.
Dim val
set val = node.getElementsByTagName("Предмет")
Sel.TypeText(cStr(val.length))
If (I <> root.childNodes.length) then ' Проверяем, чтобы не создавал пустую строку на последней итерации цикла.
Sel.MoveRight(12)
End If
I = I + 1
Next
DocWord.SaveAs(RootPath + "\fbi21.docx")
' Получение значение из тега в указанном узле.
Function GetTagVal(tagNode, tagName)
Dim Value
If tagNode.nodeName=root.nodeName Then
Set Value = root.getElementsByTagName(tagName)
Else
Set Value = tagNode.SelectNodes(tagName)
End If
If Value.length>0 Then
GetTagVal = Value.item(0).text
Else
GetTagVal = ""
End If
End Function
Создала сценарий script2.vbs, выполняющий чтение из XML-файла data1.xml информации о студентах, и организовывающий ее вывод в программу EXCEL. Данные, которые необходимо отразить в рабочей книге, должны отражать зачетные (с зачетом и без экзамена) дисциплины и количество студентов получивших по ним зачет, а также экзаменационные предметы (с зачетами, курсовыми и прочими отметками) с указанием среднего балла за экзамен среди всех студентов, его сдававших. Привела полный текст скрипта script2.vbs:
Dim WSS, RootPath, DocXML, root, ObjExcel, DocExcel, ObjWB, Sel, node, I
Set WSS = WScript.CreateObject("WScript.Shell")
RootPath = WSS.CurrentDirectory //указываем текущую директорию
' Создаём объект XML документа.
Set DocXML = WScript.CreateObject ("Msxml.DOMDocument")
' Загружаем его.
Tr = DocXML.load(RootPath + "\data1.xml")
If (Tr = False) then
WScript.Echo "Ошибка загрузи XML документа!"
WScript.Quit
End if
' Создаём объект MS Excel.
Set ObjExcel = WScript.CreateObject("Excel.Application")
Set ObjWB = ObjExcel.WorkBooks
Set DocExcel = ObjWB.Add(RootPath + "\doc.xlsx")
ObjExcel.Visible = true
set root = DocXML.documentElement
Dim CountMath, CountEcon, SumInf, NInf, SumOS, NOS
I = 0
For each node In root.childNodes // обращение к отдельному элементу
Dim val
set val = node.getElementsByTagName("Предмет")
For I = 0 to val.length - 1
' Смотрим зачётные.
If GetTagVal(val.item(I), "Название") = "Экономика" then
If val.item(I).getElementsByTagName("Зачет").item(0).text = "зачтено" then
CountEcon = CountEcon + 1
End If
End If
If GetTagVal(val.item(I), "Название") = "Математика" then
If val.item(I).getElementsByTagName("Зачет").item(0).text = "зачтено" then
CountMath = CountMath + 1
End If
End If
' Смотрим экзаменационные.
If GetTagVal(val.item(I), "Название") = "Информатика" then
NInf = NInf + 1
SumInf = SumInf + cInt(val.item(I).getElementsByTagName("Экзамен").item(0).text)
End If
If GetTagVal(val.item(I), "Название") = "ОССиО" then
NOS = NOS + 1
SumOS = SumOS + cInt(val.item(I).getElementsByTagName("Экзамен").item(0).text)
End If
Next
Next
' Зачётные.
ObjExcel.Cells(2,1).Value = "Экономика"
ObjExcel.Cells(2,2).Value = CountEcon
ObjExcel.Cells(3,1).Value = "Математика"
ObjExcel.Cells(3,2).Value = CountMath
' Экзаменационные.
ObjExcel.Cells(2,3).Value = "Информатика"
ObjExcel.Cells(2,4).Value = SumInf/NInf
ObjExcel.Cells(3,3).Value = "ОССиО"
ObjExcel.Cells(3,4).Value = SumOS/NOS
ObjExcel.ActiveWorkBook.SaveAs(RootPath + "\fbi21.xlsx")
' Получение значение из тега в указанном узле.
Function GetTagVal(tagNode, tagName)
Dim Value
If tagNode.nodeName=root.nodeName Then
Set Value = root.getElementsByTagName(tagName)
Else
Set Value = tagNode.SelectNodes(tagName)
End If
If Value.length>0 Then
GetTagVal = Value.item(0).text
Else
GetTagVal = ""
End If
End Function
Вывод:
Таким образом, я изучила приемы работы со сложными объектами Windows на VBScript/JScript.