Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Software development.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
324.44 Кб
Скачать

Функции Perl

Операции с папками.

#--- Открытие папки

opendir (DD, "Labwork #6") || die "Couldn't open directory: $!";

#--- Чтение ВСЕХ имён файлов из папки (положим, что других папок в ней нет)

@names = readdir DD;

splice @names, 0, 2; # Первые 2 строки всегда "." и ".." – удалим их

# --- Печать имён ВСЕХ файлов

foreach $name (@names)

{

print $name . "\n";

}

# --- Закрытие папки

closedir DD;

#--- Создание папки

#mkdir "TEST_DIR" || die "Couldn't create directory: $!";

#--- Удаление пустого каталога

#rmdir "TEST_DIR" || die "Couldn't delete directory: $!";

#--- Переименование каталогов и файлов

#rename "LabWork #6", "LabWork #7";

# ===========================

Операции с файлами.

#--- Открытие/создание файла.

# Атрибуты: "<" - read-only (default); ">" - write-only (create file if not exists);

# '>>' - append; '+>' or '+<' - read-write; "+>>" read-append.

#open (FD, ">>", "TEST.txt") || die "Couldn't open file: $!";

#--- Закрытие файла.

#close FD;

#--- Удаление файла

#unlink ("TEST.txt") || die "Couldn't open directory: $!";

# --- Копирование/перемещение/переименование файла

#use File::Copy;

#copy "TEST.txt", "LabWork #6/TEST2.txt";

#move "TEST.txt", "LabWork #6/TEST2.txt";

# --- Определение размера файла (в байтах)

use File::stat;

$file_owner = stat("TEST.txt")->size;

print $file_owner;

Порядок выполнения работы

В соответствии с заданием написать и отладить программу, протестировав её на предложенном наборе файлов, имеющих одинаковую структуру имён: <группа><номер версии>_<номер подверсии>. Если это первая (начальная) подверсия, то её номер не ставится.

Шаблон программы можно взять следующим:

use File::Copy;

use File::stat;

opendir(DIR, "LabWorkFiles#6") || die($!);

@names = readdir(DIR);

splice(@names, 0, 2);

closedir(DIR);

chdir("LabWorkFiles#6");

$OutputValue = 0;

# You may WRITE CODE HERE

foreach $name (@names)

{

# You may WRITE CODE HERE

}

# You may WRITE CODE HERE

print($OutputValue);

Варианты заданий

Вариант 1

Создать папку с именем B внутри текущей папки. Переместить туда все файлы группы b, приписав к их именам в конце .bak. Вывести на экран общее число таких файлов.

Вариант 2

Создать папку с именем 1_8 на один уровень выше папки и интересующими нас файлами, скопировать туда файлы размером 1 или 8 байт. Вывести на экран число скопированных файлов.

Вариант 3

Скопировать основную папку в любое другое доступное для записи место (но чтобы скопированная папка сохранила то же имя) вместе со всеми файлами, кроме файлов второй подверсии. Приписать в начале имён скопированных файлов New_. Вывести на экран число нескопированных файлов.

Вариант 4

Добавить расширение .arj в конец имён файлов групп a и c, остальные файлы удалить. Вывести на экран число удалённых файлов.

Вариант 5

Создать папку с именем 2_3 рядом с папкой с нашими файлами, переместить туда все файлы версий со второй по третью. Вывести на экран число оставшихся файлов.

Вариант 6

Вывести на экран средний размер всех файлов, кроме файлов группы b, которые скопировать в любое другое доступное для записи место без создания отдельной папки для таких файлов.

Вариант 7

Переместить основную папку в любое другое доступное для записи место. Вывести на экран общий размер всех восьмибайтовых файлов.

Вариант 8

Разнести файлы по двум папкам с именами V#1 и OtherVs: в первую переместить все файлы первой версии, добавив к их именам в конце приписку _old, во вторую – остальные версии. Исходный каталог удалить. Вывести на экран число файлов в первой папке.

Вариант 9

Файлам первой подверсии проставить её номер. Файлы второй и последующих подверсий размером 2 или 4 байта удалить. Вывести на экран число удалённых файлов.

Вариант 10

Удалить файлы группы c первой подверсии, если их размер меньше 4 байт, в противном случае (если эти файлы размером от 4 байт и больше) – переместить в любое другое место. Вывести на экран суммарный размер удалённых файлов.

Контрольные вопросы

  1. Для чего главным образом разрабатывался язык Perl?

  1. В каких случаях целесообразно написание скриптов?

  2. К какой группе языков относится Perl? Fortran? Назвать основное отличие между этими двумя группами языков, перечислить их достоинства и недостатки.

  3. Каков синтаксис переменных в Perl?

  4. Дать определение идентификатору. Какова связь между идентификатором и константой, между идентификатором и переменной?

  5. Дать определение литералу. Какова связь между литералом и константой, между литералом и переменной?

  6. Каков синтаксис массивов в Perl? Как узнать число его элементов?

  7. Возможно ли в процессе выполнения программы увеличить размерность массива? А уменьшить?

  8. Какие составные операторы цикла вы знаете?

  9. Что такое регулярные выражения и для чего они служат?

  10. Что такое метасимволы в выражениях? Приведите пример метасимволов в Perl.

  11. Рассказать про один или несколько метасимволов в Perl подробно.

  12. Каким образом осуществляется поиск в строке в Perl?

ЛАБОРАТОРНАЯ РАБОТА №7 Скрипты. Язык Perl. Операции со строками

Цель работы

Получение навыков автоматической обработки текстовых файлов: построковая и внутристроковая модификация.

Описание

Чтение содержимого файла

В данной работе мы рассмотрим только построчное считывание и модификацию текстовых файлов. Для работы с такими файлами (главным образом, чтением из файла и записью в файл) предусмотрены так называемые дескрипторы файлов. Дескрипторы в Perl реализованы оператором < >. Пример построчного чтения из файла с именем дескриптора FILE в массив @str:

$i = 0;

while ($s = <FILE>)

{ $Str[$i] = $s;

$i++;

}

Выражение само примет ложное значение, когда прочитается последняя строка. Если мы хотим прочитать все строки файла последовательно в один и тот же массив, то тогда запись сокращается до

@Str = <FILE>;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]