Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы / РГР по Операционным системам

.docx
Скачиваний:
21
Добавлен:
02.01.2020
Размер:
162.25 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Расчётно-графическаязадание

FCс дополнительной опцией сравнения каталогов

Выполнили:

Студентки группы ФБИ – 22

Преподаватель:

Эстрайх И.В.

Новосибирск 2014

Цель работы:

Изучить команду FC, реализовать её на одном из скриптовых языков программирования.

FCкоманда

Сравнение двух файлов или наборов файлов и вывод различий между ними.

/A – вывод только первой и последней строк для каждой группы различий.

/B – сравнение двоичных файлов.

/C – сравнение без учета регистра символов.

/L – сравнение файлов в формате ASCII.

/LBn – максимальное число несоответствий для заданного числа строк.

/N – вывод номеров строк при сравнении текстовых файлов ASCII.

/OFF[LINE] – не пропускать файлы с установленным атрибутом «Автономный».

/T – символы табуляции не заменяются эквивалентным числом пробелов.

/U – сравнение файлов в формате INICODE.

/W – пропуск пробелов и символов табуляции при сравнении.

/nnn – число последовательных совпадающих строк, которое должно встретиться после группы несовпадающих.

[диск1:][путь1]имя_файла1 – указывает первый файл или набор файлов для сравнения.

[диск2:][путь2]имя_файла2 – указывает второй файл или набор файлов для сравнения.

Текст программы.

varArgs; // Коллекция аргументов, передаваемых программе.

varFSObj, WShellObj;

var I, NeedfulArgsObj, AllArgsObj; // Счётчик и переменные для определения корректности ввода аргументов.

var FName1, FName2;

varFolderCompareMode; // Флаг, принимающий значение равное 1 в случае передачи параметра /D.

// Записываем в переменную коллекцию аргументов.

ArgsObj = WScript.Arguments

// Затем Создаём объекты, которые будет использовать.

WShellObj = WScript.CreateObject("WScript.Shell")

FSObj = WScript.CreateObject("Scripting.FileSystemObject")

// Инициализация переменных.

FName1 = "";

FName2 = "";

FolderCompareMode = 0;

NeedfulArgs = 0;

AllArgs = 0;

// Разбираем аргументы.

// Если среди всех есть параметров «/?», то выводим справочную информацию.

for (var i = 0; i <ArgsObj.length; i++)

{

if (ArgsObj(i) == "/?")

{

PrintHelp()

}

}

// Выводим сообщение об ошибке, если количество элементов меньше 2 или больше 3.

if ((ArgsObj.length< 2) || (ArgsObj.length> 3))

{

WriteError();

}

// Всего максимум может быть три аргумента. Смотримихвсе.

for (var i = 0; i <ArgsObj.length; i++)

{

varThisArg; // Строка с разбираемым аргументом.

ThisArg = ArgsObj(i);

if ((ThisArg.indexOf("/F1=", 0) == 0) && (ThisArg.length> 4) && (FName1 == ""))

{

FName1 = ThisArg.substr(4);

NeedfulArgs++;

AllArgs++;

}

if ((ThisArg.indexOf("/F2=", 0) == 0) && (ThisArg.length> 4) && (FName2 == ""))

{

FName2 = ThisArg.substr(4);

NeedfulArgs++;

AllArgs++;

}

if ((ThisArg == "/D"))

{

FolderCompareMode = 1;

AllArgs++;

}

}

// Проверяем на существования файлов/каталогов, переданных через параметры.

if (FolderCompareMode == 1)

{

CheckExistsFolder(FName1);

CheckExistsFolder(FName2);

}

else

{

CheckExistsFile(FName1);

CheckExistsFile(FName2);

}

// Проверяем на успешность обработки аргументов и выполненяем основную часть скрипта.

if ((NeedfulArgs == 2) && (AllArgs == ArgsObj.length))

{

if (FolderCompareMode == 1)

{

WScript.Echo("Сравнениекаталогов " + FSObj.GetBaseName(FName1) + " и " + FSObj.GetBaseName(FName2) + ":");

CompareFolders(FName1, FName2);

CompareFolders(FName2, FName1);

}

else

{

WScript.Echo("Сравнениефайлов " + FSObj.GetFileName(FName1) + " и " + FSObj.GetFileName(FName2) + ":");

CompareFiles(FName1, FName2);

CompareFiles(FName2, FName1);

}

}

else

{

WriteError()

}

// Ниже идёт описание функций и процедур.

// Сравнивание двух текстовых файлов и вывод различий.

functionCompareFiles(FilePath1, FilePath2)

{

var File1, File2, Str1, Str2, N;

// Открываемфайлыдлячтения.

File1 = FSObj.OpenTextFile(FilePath1, 1);

File2 = FSObj.OpenTextFile(FilePath2, 1);

WScript.Echo("--------- Файл " + FSObj.GetFileName(FilePath1));

N = 1; // Номерстроки.

while (!File1.AtEndOfStream)

{

Str1 = File1.ReadLine();

if (!File2.AtEndOfStream)

{

Str2 = File2.ReadLine();

}

if (Str1 != Str2)

{

WScript.Echo(N + ". " + Str1);

}

N++;

}

// Закрываемфайлы.

File1.Close();

File2.Close();

}

// Сравнивание двух каталогов и вывод различий.

functionCompareFolders(FolderPath1, FolderPath2)

{

var Folder1 = FSObj.GetFolder(FolderPath1);

var Folder2 = FSObj.GetFolder(FolderPath2);

var SubFolders1 = new Enumerator(Folder1.SubFolders);

var Files1 = new Enumerator(Folder1.Files);

varFound = 0; // Флаг, сигнализирующий что искомый файл / папка найдена.

WScript.Echo("--------- Папка " + FSObj.GetBaseName(FolderPath1));

// Перебираемпапки.

for (; !SubFolders1.atEnd(); SubFolders1.moveNext())

{

Found = 0;

var SubFolders2 = new Enumerator(Folder2.SubFolders);

for (; !SubFolders2.atEnd(); SubFolders2.moveNext())

{

if (SubFolders1.item().Name == SubFolders2.item().Name)

{

Found = 1;

}

}

if (Found == 0)

{

WScript.Echo("<Папка> " + SubFolders1.item().Name);

}

}

// Перебираемфайлы.

for (; !Files1.atEnd(); Files1.moveNext())

{

Found = 0;

var Files2 = new Enumerator(Folder2.Files);

for (; !Files2.atEnd(); Files2.moveNext())

{

if (Files1.item().Name == Files2.item().Name)

{

Found = 1;

}

}

if (Found == 0)

{

WScript.Echo(Files1.item().Size + " байт " + Files1.item().Name);

}

}

}

// Вывод справочной информации и выход из скрипта.

functionPrintHelp()

{

WScript.Echo("Сравнивает два текстовых файла или два каталога между собой и выводит различия.");

WScript.Echo("Команда fc.js [/F1=имя файла и каталога] [/F2=имя второго файла или каталога] [/D]");

WScript.Echo("Праметр /D включает режим сравнения каталогов.");

WScript.Quit();

}

// Вывод сообщения об ошибке и выход из скрипта.

functionWriteError()

{

WScript.Echo("Ошибка! Для получения сведения о команде «FC» введите её с ключом /?.");

WScript.Quit();

}

// Функция проверяет существование файла. Если файл не существует, Выводит сообщение об этом.

function CheckExistsFile(FilePath)

{

if (FSObj.FileExists(FilePath) == false)

{

WScript.Echo("Файл с таким именем не найден!");

WScript.Quit();

}

}

// Функция проверяет существование папки. Если файл не существует, Выводит сообщение об этом.

function CheckExistsFolder(FolderPath)

{

if (FSObj.FolderExists(FolderPath) == false)

{

WScript.Echo("Папка с таким именем не найдена!")

WScript.Quit();

}

}

Блок-схема программы.

Вывод:

Изучила команду FC и реализовала её на языке VisualBasicScript.

Соседние файлы в папке Операционные системы