Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Команда Findstr и ее использование в цикле




Циклы и связывание времени выполнения для переменных

Как и в рассмотренном выше примере с составными выражениями, при обработке переменных среды внутри цикла могут возникать труднообъяснимые ошибки, связанные с ранними связыванием переменных. Рассмотрим пример. Пусть имеется командный файл следующего содержания:

SET a=FOR %%i IN (Раз,Два,Три) DO SET a=%a%%%iECHO a=%a%

В результате его выполнения на экран будет выведена строка "a=Три", то есть фактически команда

FOR %%i IN (Раз,Два,Три) DO SET a=%a%%%i

равносильна команде

FOR %%i IN (Раз,Два,Три) DO SET a=%%i

Для исправления ситуации нужно, как и в случае с составными выражениями, вместо знаков процента (%) использовать восклицательные знаки и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, наш пример следует переписать следующим образом:

SETLOCAL ENABLEDELAYEDEXPANSIONSET a=FOR %%i IN (One,Two,Three) DO SET a=!a!%%iECHO a=%a%

В этом случае на экран будет выведена строка "a=OneTwoThree".

Назначение команды - поиск строк в текстовых файлах.

 

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл]

[/C:строка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]]

строки [[диск:][путь]имя_файла[...]]

 

/L Поиск строк дословно.

/R Поиск строк как регулярных выражений.

/S Поиск файлов в текущей папке и всех ее подпапках.

/I Определяет, что поиск будет вестись без учета регистра.

/X Печатает строки, которые совпадают точно.

/V Печатает строки, не содержащие совпадений с искомыми.

/N Печатает номер строки, в которой найдено совпадение, и ее содержимое.

/M Печатает только имя файла, в которой найдено совпадение.

/O Печатает найденный строки через пустую строку.

/P Пропускает строки, содержащие непечатаемые символы.

/F:файл Читает список файлов из заданного файла (/ для консоли).

/C:строка Использует заданную строку как искомую фразу поиска.

/D:список_папок Поиск в списке папок (разделяются точкой с запятой).

строка Искомый текст.

[диск:][путь]имя_файла - задает имя файла или файлов.

 

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

имеет префикса /C. Например, 'FINDSTR "Привет мир" a.b' ищет "Привет" или

"мир" в файле a.b, а команда 'FINDSTR /C:"Привет мир" a.b' ищет строку

"Привет мир" в файле a.b.

 

Краткая сводка по синтаксису регулярных выражений:

. Любой символ.

* Повтор: ноль или более вхождений предыдущего символа или класса

^ Позиция в строке: начало строки

$ Позиция в строке: конец строки

[класс] Класс символов: любой единичный символ из множества

[^класс] Обратный класс символов: любой единичный символ из дополнения

[x-y] Диапазон: любые символы из указанного диапазона

\x Служебный символ: символьное обозначение служебного символа x

\<xyz Позиция в слове: в начале слова

xyz\> Позиция в слове: в конце слова

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

@echo off

set /a kol=0

for /f %%b in ('findstr /rc:"[0-1]" num.txt') do set /a kol=kol+1

echo %kol%

 

2. МЕТОДИКА ВЫПОЛНЕНИЯ

 

1. Неформально ознакомиться с теоретическими сведениями.

2. Для подготовки текстов командных файлов рекомендуется использовать блокнот (Notepad). При этом следует избегать использования в выводимых на экран результатах работы командного файла букв русского алфавита.

3. Разработать и выполнить командные файлы (КФ), выполняющие следующие функции:

  1. Вывод на экран имен всех файлов с указанным расширением, находящихся в каталоге, имя которого задается при запуске командного файла первым параметром. Расширение файлов задается вторым параметром.
  2. Среди введенных с клавиатуры целых чисел (использовать SET /P) найти наибольшее и наименьшее. Признак конца ввода – знак -.
  3. В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только требуемый результат.
  4. В каталогах, имена которых заданы первым и вторым параметрами командного файла, найти и вывести на экран имена файлов (расширения могут быть любые), присутствующие как в первом, так и во втором каталоге. Следует использовать только один оператор FOR.
  5. Вычисление и вывод на экран значения факториала целого числа, задаваемого при запуске КФ. Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально возможную величину, выводить соответствующие сообщения. Для проверки правильности вычислений использовать калькулятор.

4. Разработать и выполнить КФ в соответствии с табл. 5 (индивидуальные задания для студентов).

 

Таблица 5. Индивидуальные задания для бригад и студентов

Но-мер бри-гады   Действия, выполняемые КФ
  1.Подсчет количества целых чисел в текстовом файле. Считать, что слова в файле записаны в формате ОДНО СЛОВО В СТРОКЕ. Слово – это целое число (состоящее из десятичных цифр) или последовательность букв латинского алфавита (начинающаяся с буквы). Имя файла задается первым параметром КФ. 2. Вывод на экран списка файлов, хранящихся в указанном первым параметром каталоге и созданных в первом полугодии (месяцы 1-6) года, указанного вторым параметром КФ.
  1. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти файл наибольшего размера с расширением, указанным вторым параметром КФ. 2. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти ТРИ файла самого большого размера. Вывести имена файлов, их размеры и даты создания
  1. Разбиение текстового файла, имя которого задано первым параметром КФ, на три файла с именами 1.txt, 2.txt и 3.txt. Количество строк в каждом из этих файлов задано вторым, третьим и четвертым параметрами КФ. Проверить наличие указанного исходного файла и вывести сообщение о его отсутствии, проверить наличие остальных параметров и их значения на допустимость 2. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти суммарный объем файлов, имеющих расширение, указанное вторым параметром КФ.
  1. Удаление из каталога, заданного первым параметром, файлов, которые присутствуют и в каталоге, указанным вторым параметром. Предусмотреть запрос пользователю на подтверждение удаления. 2. В каталоге, указанном первым параметром КФ, и его подкаталогах, найти файлы, созданные во второй половине рабочего дня (после 14 часов) и скопировать их в отдельный подкаталог.
  1. Нахождение суммарного объема файлов с атрибутом system, хранящихся в каталоге, имя которого задано первым параметром КФ. 2. Проверить наличие файла Numb.txt в каталоге, указанном первым параметром КФ. Прочитать целые числа из файла, найти среди них простые и вывести результаты на экран. Считать, что все числа не превышают значения 2500.
  1. Поиск на диске C: (или любом доступном диске) файла с заданным именем. Если файл не найден – вывод сообщения. Если файл найден – открыть его для редактирования. 2. Проверка наличия на диске в каталоге, указанном первым параметром КФ, файла FNames.txt, содержащего список имен файлов и подкаталогов. Если он есть – проверка наличия перечисленных в списке файлов и вывод имен отсутствующих. Если файла FNames нет, создание его и запись имен файлов и подкаталогов.
  1. Вывод списка DLL (хранящихся на доступном диске), созданных до 12.2008 размером до 12000 байтов. 2. Проверка наличия на диске в каталоге, указанном первым параметром КФ, файла Numbers.txt, содержащего 2 столбца целых чисел, столбцы располагаются с позиций 2 и 20 и отделены пробелами. Если файла нет – вывод сообщения. Если файл есть, создать новый файл, содержащий три столбца, в третий поместить сумму чисел из двух первых столбцов.
  1. Просмотр содержимого каталога, указанного первым параметром КФ. Необходимо: 1. создать подкаталоги с именами EXE, TXT, CMD, DOC и OTHER. 2. В каждый подкаталог скопировать файлы с соответствующими расширениями. 3. Пустые подкаталоги удалить. 2. В каталоге, указанном первым параметром КФ, (и его подкаталогах) найти файлы наибольшего и наименьшего размеров. Вывести имена файлов, их размеры и даты создания.
  1. Проверка наличия трех текстовых файлов на диске и объединения их в один файл. 2. Подсчет количества вещественных чисел и целых чисел в текстовом файле. Вещественные и целые числа подсчитать отдельно. Считать, что слова в файле записаны в формате ОДНО СЛОВО В СТРОКЕ. Слово – это целое число (состоящее из десятичных цифр) или последовательность букв латинского алфавита (начинающаяся с буквы) или последовательность десятичных цифр с точкой (.) внутри строки. Имя файла задается первым параметром КФ.
  1. Подсчет количества слов в текстовом файле, содержащем целые числа и слова. Считать, что слова в файле записаны в формате ОДНО СЛОВО В СТРОКЕ. Число – это целое число (состоящее из десятичных цифр). Слово - последовательность букв латинского алфавита (начинающаяся с буквы). Имя файла задается первым параметром КФ. 2. Просмотр содержимого каталога, указанного первым параметром КФ. Необходимо: 1. создать подкаталоги с именами 1, 2,..., 12. 2. В каждый подкаталог скопировать файлы, созданные в соответствующие месяцы. 3. Пустые подкаталоги удалить.
Но-мер бри-гады   Действия, выполняемые КФ
  1. Подсчет количества строк в текстовом файле, имя которого задано первым параметром КФ. Проверить наличие указанного файла и вывести сообщение о его отсутствии. 2. С помощью команды DIR вывести на экран имена файлов, находящихся в каталоге, имя которого задано первым параметром КФ. Второй и остальные параметры задают расширения файлов, имена которых выводить не следует. Рекомендуется с помощью ATRIB присвоить некоторым файлам атрибут СКРЫТЫЙ – такие файлы DIR не показывает.
  1.Поиск текстового файла по его содержимому. Считать, что слова в текстовых файлах записаны в формате ОДНО СЛОВО В СТРОКЕ. Искомое слово задается первым параметром КФ.
  1. Вывод на экран аргументов, с которыми КФ был запущен. Число аргументов от 4 до 11. При неверном числе аргументов ничего не выполнять, сообщить об ошибке. 2. Поиск и вывод на экран минимального и максимального значения аргумента КФ. Предполагается, что все аргументы КФ – целые положительные числа.

 

Примечание. Для решения задач 1, 9 и 10 рекомендуется использовать команду Findstr

 

3. КОНТРОЛЬНЫЕ ВОПРОСЫ

 




Поделиться с друзьями:


Дата добавления: 2015-03-29; Просмотров: 3814; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.