- •Кетков ю.Л.
- •Раздел 5. Системные данные текстового типа 33
- •Раздел 6. Основные синтаксические конструкции языка c 46
- •Раздел 7. Указатели и ссылки 59
- •Раздел 8. Функции и их аргументы 62
- •Раздел 9. Работа с массивами. 74
- •Раздел 10. Пользовательские типы данных. 95
- •Раздел 11. Работа с файлами 104
- •Раздел 12. Библиотеки стандартных и нестандартных функций 118
- •Раздел 15. Классы. Создание новых типов данных 131
- •Раздел 16. Классы как средство создания больших программных комплексов 150
- •Раздел 17. Прерывания, события, обработка исключений 167
- •Введение
- •Раздел 1. Немного истории
- •Раздел 2. Структура программы на языке c
- •Раздел 3. Среда программирования
- •Раздел 4. Системные данные числового типа
- •4.1. Типы числовых данных и их представление в памяти эвм
- •4.1.1. Внутреннее представление целочисленных данных
- •4.1.2. Однобайтовые целочисленные данные
- •4.1.3. Двухбайтовые целочисленные данные
- •4.1.4. Четырехбайтовые целочисленные данные
- •4.1.5. Восьмибайтовые целочисленные данные
- •4.2. Внутреннее представление данных вещественного типа
- •4.3. Внешнее представление числовых констант
- •4.4. Объявление и инициализация числовых переменных
- •4.5. Ввод числовых данных по запросу программы
- •4.5.1. Потоковый ввод данных числового типа
- •4.5.2. Форматный ввод
- •4.6. Вывод числовых результатов
- •4.6.1. Форматный вывод
- •4.6.2. Потоковый вывод
- •4.7. Примеры программ вывода числовых данных
- •4.8. Операции над числовыми данными целого типа
- •4.9. Операции над числовыми данными вещественного типа
- •Раздел 5. Системные данные текстового типа
- •5.1. Символьные данные и их представление в памяти эвм
- •5.2. Строковые данные и их представление в памяти эвм
- •5.3. Ввод текстовых данных во время работы программы
- •5.3.1. Форматный ввод
- •5.3.3. Потоковый ввод
- •5.3.4. Специальные функции ввода текстовых данных
- •5.4. Вывод текстовых данных
- •5.4.1. Форматный вывод
- •5.5.2. Операции над строковыми данными
- •5.6. Управление дисплеем в текстовом режиме
- •Раздел 6. Основные синтаксические конструкции языка c
- •6.1. Заголовок функции и прототип функции
- •6.2. Объявление локальных и внешних данных
- •6.3. Оператор присваивания
- •6.4. Специальные формы оператора присваивания
- •6.5. Условный оператор
- •6.6. Оператор безусловного перехода
- •6.7. Операторы цикла
- •6.8. Дополнительные операторы управления циклом
- •6.9. Оператор выбора (переключатель)
- •6.10. Обращения к функциям
- •6.11. Комментарии в программах
- •Раздел 7. Указатели и ссылки
- •7.1. Объявление указателей
- •7.2. Операции над указателями
- •7.3. Ссылки
- •Раздел 8. Функции и их аргументы
- •8.1. Параметры-значения
- •8.2. Параметры-указатели
- •8.3. Параметры-ссылки
- •8.4. Параметры-константы
- •8.5. Параметры по умолчанию
- •8.6. Функции с переменным количеством аргументов
- •8.7. Локальные, глобальные и статические переменные
- •8.8. Возврат значения функции
- •8.9. Рекурсивные функции
- •8.10. Указатели на функцию и передача их в качестве параметров
- •8.11. "Левые" функции
- •Раздел 9. Работа с массивами.
- •9.1. Объявление и инициализация массивов.
- •9.2. Некоторые приемы обработки числовых массивов
- •9.2. Программирование задач линейной алгебры
- •9.2.1. Работа с векторами
- •9.2.2.Работа с матрицами
- •9.3. Поиск
- •9.3.1. Последовательный поиск
- •9.3.2. Двоичный поиск
- •9.4. Сортировка массивов.
- •9.4.1. Сортировка методом пузырька
- •9.4.2. Сортировка методом отбора
- •9.4.3. Сортировка методом вставки
- •9.4.4. Сортировка методом Шелла
- •9.4.5.Быстрая сортировка
- •9.5. Слияние отсортированных массивов
- •9.6. Динамические массивы.
- •Раздел 10. Пользовательские типы данных.
- •10.1. Структуры
- •10.1.1. Объявление и инициализация структур
- •10.1.2. Структуры – параметры функций
- •10.1.3.Функции, возвращающие структуры
- •10.2. Перечисления
- •10.3. Объединения
- •Раздел 11. Работа с файлами
- •11.1.Файлы в операционной системе
- •11.1. Текстовые (строковые) файлы
- •11.2. Двоичные файлы
- •11.3. Структурированные файлы
- •11.4. Форматные преобразования в оперативной памяти
- •11.5. Файловые процедуры в системе bcb
- •11.5.1. Проверка существования файла
- •11.5.2. Создание нового файла
- •11.5.3. Открытие существующего файла
- •11.5.4. Чтение из открытого файла
- •11.5.5. Запись в открытый файл
- •11.5.6. Перемещение указателя файла
- •11.5.7. Закрытие файла
- •11.5.8. Расчленение полной спецификации файла
- •11.5.9. Удаление файлов и пустых каталогов
- •11.5.10. Создание каталога
- •11.5.11. Переименование файла
- •11.5.12. Изменение расширения
- •11.5.13. Опрос атрибутов файла
- •11.5.14. Установка атрибутов файла
- •11.5.15. Опрос и изменение текущего каталога
- •11.6. Поиск файлов в каталогах
- •Раздел 12. Библиотеки стандартных и нестандартных функций
- •12.2. Организация пользовательских библиотек
- •12.3. Динамически загружаемые библиотеки
- •13.1. Препроцессор и условная компиляция
- •13.2. Компилятор bcc.Exe
- •13.3. Утилита grep.Com поиска в текстовых файлах
- •14.1. Переопределение (перегрузка) функций
- •14.2. Шаблоны функций
- •Раздел 15. Классы. Создание новых типов данных
- •15.1. Школьные дроби на базе структур
- •15.2. Школьные дроби на базе классов
- •15.3. Класс на базе объединения
- •15.4. Новые типы данных на базе перечисления
- •15.5. Встраиваемые функции
- •15.6. Переопределение операций (резюме)
- •15.8. Конструкторы и деструкторы (резюме)
- •Раздел 16. Классы как средство создания больших программных комплексов
- •16.1. Базовый и производный классы
- •16.1.1.Простое наследование
- •16.1.2. Вызов конструкторов и деструкторов при наследовании
- •16.1.3. Динамическое создание и удаление объектов
- •16.1.4. Виртуальные функции
- •16.1.5. Виртуальные деструкторы
- •16.1.6. Чистые виртуальные функции и абстрактные классы
- •16.2. Множественное наследование и виртуальные классы
- •16.3. Объектно-ориентированный подход к созданию графической системы
- •Раздел 17. Прерывания, события, обработка исключений
- •17.1. Аппаратные и программные прерывания
- •17.2. Исключения
13.3. Утилита grep.Com поиска в текстовых файлах
В состав систем программирования BC 3.1 и BCB входит очень мощная поисковая утилита grep.com. Ее имя образовано от аббревиатуры, которая в ранних руководствах представлялась как Global Regular Expression Print –Печать Глобальных Регулярных Выражений. В новых руководствах предложена более прогрессивная комбинация слов – Generalized Regular Expression Parser – Обобщенный Грамматический Разбор Регулярных Выражений. Так или иначе, в обеих аббревиатурах присутствует термин регулярные выражения. С простейшими представителями регулярных выражений встречался практически каждый программист, который искал или копировал файлы с именами типа *.txt или ?set.txt. В этих именах символ * обозначал цепочку любых символов (в том числе и цепочку нулевой длины), а знак ? заменял любой одиночный символ.
Утилита запускается из командной строки со следующим набором параметров:
>grep [ключи поиска] поисковый_образ область_поиска
Ключи поиска представляют собой одиночные буквы или цепочки букв, которым предшествует символ '–'. Например, –A -D . Вслед за буквой может находиться знак минус (опция отключена) или знак плюс (опция включена). По умолчанию –R эквивалентно –R+. В ключах большие и малые буквы эквивалентны. Смежные ключи могут объединяться в группы: -C -D -I эквивалентно -CDI или -CI -D. В некоторых случаях порядок ключей может оказаться важным, т.к. действия одного могут поглощать действия другого. Список ключей и расшифровка устанавливаемых ими режимов поиска приведены в табл. 13.3.
Таблица 13.3
Ключ |
Назначение |
-C- |
Выводить только количество совпадений в каждом файле без указания номеров строк. Без этой опции номера строк выдаются. |
-D+ |
Производить поиск с заходом в подкаталоги. Без указания пути и без ключа -D поиск производится только в текущем каталоге. |
-I+ |
Игнорировать разницу между большими и малыми буквами (по умолчанию большие и малые буквы различаются). |
-L- |
Выводить только имена файлов, где обнаружен поисковый образ |
-N- |
Выводить номера строк в файлах, где обнаружен поисковый образ |
-O- |
Выводить сообщения в формате Unix |
-R+ |
Искать регулярные выражения |
-U- |
Изменить стандартные опции поиска, действующие в GREP по умолчанию, и сохранить новые опции в grep.com |
-V- |
Инверсный поиск – выдаются только те строки, в которых поисковый образ не содержится. |
-W- |
Поиск слова. По умолчанию слово состоит из букв, цифр и символа подчерк Все остальные символы рассматриваются как разделители слов. |
-Z- |
Более подробный вывод – имя файла, число совпадений (даже если оно равно 0) |
Поисковый образ S1S2...Sk может быть представлен просто словом, текстом, заключенным в кавычки (если в поисковом образе есть пробелы или табуляторные пропуски), или регулярным выражением. Если используется ключ -R, то поисковый образ представляет регулярное выражение, в котором присутствуют специальные символы, имеющие следующий смысл:
"^S1S2...Sk" символ "крышка" (caret) перед поисковым образом означает, что результат поиска должен находиться в начале строки;
"S1S2...Sk$" символ доллара после поискового образа означает, что результат поиска должен находиться в конце строки;
. точка заменяет любой символ;
\ слэш предшествует символу, который ищется (например, \. означает поиск точки);
* предшествующий символ может встретиться 0 или большее число раз (например,
qw* означает поиск q, qw, qww, qwww, ...);
+ предшествующий символ может встретиться 1 или большее число раз (например,
qw+ означает поиск qw, qww, qwww, ...);
[α1α2... αk] должен встретиться хотя бы один из символов, указанных в скобках;
[^α1α2... αk] не должен встретиться ни один из символов, указанных в скобках;
В поисковом множестве можно задавать диапазоны подряд идущих символов:
[0-9] все цифры;
[a-jx -z] малые буквы от a до j, x ,y, z
Очень полезная возможность открывается ключом -u. Вы можете скопировать утилиту grep.com в свой каталог и произвести там нужную настройку режимов поиска с последующим запоминанием удобной для вас комбинации ключей в теле модуля grep. После этого можно уже не набирать эту последовательность ключей при повторных поисках.
Поиск осуществляется среди тех файлов и каталогов, которые указаны в конце командной строки. Например:
>grep -W fun1 *.c *.cpp
В этом случае производится поиск слова fun1 в текущем каталоге среди всех файлов с расширениями .c и .cpp.
>grep -D "my book" \*.doc
В этом случае область поиска – файлы с расширением .doc в корневом каталоге и всех его подкаталогах. Так как поисковый образ содержит пробелы, то он заключен в кавычки.
Для поиска тех или иных идентификаторов в большом количестве программ удобно создать bat-файл, например, с именем grep.bat:
grep.com -i -d -w -n %1 *.c *.cpp > 1.txt
Такой файл запускается по команде:
grep.bat word
Здесь word – искомый идентификатор, он заменит в bat-файле параметр %1. Удобство заключается еще и в том, что результат поиска записывается в файл 1.txt, который можно в дальнейшем детально изучать. Смотреть результаты большого поиска на экране бывает не всегда удобно (да и объем выдаваемой информации может превысить емкость экрана).
Раздел 14. Функции. Новые возможности в C++