«Постойте, да ведь в редакторах Windows это делается точно так же» – скажет бывалый читатель. Да, но с одной поправкой: редакторы IDE и Windows используют разные буферы обмена, – у каждого свой. Текст, помещенный в буфер обмена Windows, не вставляется в окно IDE и наоборот. Кстати, содержимое буфера обмена IDE можно открыть через пункт меню Edit –> Show Clipboard.
Примечание. В среде Free Pascal под Windows имеются пункты меню Copy to Windows и Paste from Windows, они служат для обмена кусками текста со средой Windows.
Справочная система
Как ни полезны «примочки» редактора текста, они не способны ответить на вопросы забывчивого программиста. Например, о правильном написании ключевого слова или о параметрах некоторой процедуры. С такими вопросами обращаются к руководству по языку, – и шурши страницами! Впрочем, в каком веке мы живем? Все это есть в компьютере, надо лишь поискать. Справка открывается через пункт меню «Help» или клавишей F1 – нажал, и вот тебе счастье! Но если вас интересует что-то конкретное, лучше поступить иначе, – я расскажу о двух таких приемах.
Первый удобен, когда интересующее вас слово уже содержится в тексте. Установите курсор в пределах этого слова (под любой его буквой), например, под словом IOResult, и нажмите комбинацию Ctrl+F1. Если справочная система найдет «досье» на это слово, то покажет его в окне «Help» (рис. 64).
Рис.64 – Вызов окна справки для слова «IOResult»
А если слово не обнаружится? Тогда справочник покажет список всех своих статей – так называемый индекс – и выделит ближайшее похожее слово. С этого момента вы можете самостоятельно искать нужные слова в индексе. Для поиска просто набирайте слово буква за буквой. Для повторного поиска сдвиньте курсор в любом направлении и снова набирайте слово. Когда искомое слово подсветится, для просмотра статьи просто нажмите Enter. Это второй прием получения справки. На рис. 65 показан результат поиска в индексе слова «Close».
Все, что выделено в справке желтым цветом – это гиперссылки на статьи справочной системы. Щелкая по ним двойным щелчком (либо нажимая Enter), вы можете разгуливать по справочной системе, как по Интернету.
C окном справочной системы можно обращаться так же, как с окнами редактора: перемещать, изменять размеры. Вот где пригодится умение работать в многооконной среде! Хотите скопировать что-то из окна справки? Тогда выделите нужный фрагмент буксировкой мыши, а затем перенесите его в свою программу через буфер обмена (Ctrl+Insert, затем Shift+Insert).
Рис.65 – Поиск слова «Close» в индексе справочной системы
Напомню, что порядок установки справочной системы для IDE Free Pascal изложен в главе 4. Пользователи Borland Pascal могут найти в Интернете перевод этой справки на русский. Для установки русской справки поместите её файл в ту же папку, где находится исполняемый файл «BP.EXE», и дайте файлу справки стандартное имя «TURBO.TPH». Не забудьте предварительно сохранить или переименовать исходный «английский» файл, – а вдруг ещё пригодится?
Итоги
• Редактором текста можно открыть столько файлов, сколько вам нужно. Каждый файл открывается в отдельном окне; обращаться с окнами так же легко, как с окнами Windows.
• Для переноса кусков текста используйте буфер обмена.
• Буфер обмена IDE и буфер обмена Windows не связаны между собой. Для переноса текста в другие файлы Windows открывайте файлы своих программ в редакторах этой системы, например, в блокноте. Или воспользуйтесь пунктами меню Copy to Windows и Paste from Windows.
• Ищите ответы на свои вопросы в справочной системе IDE.
Глава 29
Читайте по-новому
Отдохнув на экскурсии, с новой силой набросимся на файлы, – ведь именно там хранятся наши данные. Научимся извлекать из файлов числа.
Полицейская база данных, версия 1
Одна из первых наших программ исполняла должность электронного часового, охранявшего секретный объект. Теперь поможем другой силовой структуре – дорожной полиции.
Долг автоинспектора – в числе прочего – поиск угнанных автомобилей. Работа нехитрая: заприметив подозрительный автомобиль, инспектор сверяет его номер со своей картотекой. И, если номер в картотеке найдется, принимает меры к задержанию автомобиля и поимке преступника. В отличие от часового, который помнит всего один пароль, полицейский роется в пухлой картотеке с тысячами номеров. В этом и состояла его главная трудность, пока не явились компьютерные базы данных.
Базы данных (сокращенно БД) – кто не слышал о них? На ум приходят базы данных Пентагона, ЦРУ и налоговой инспекции. Да, эти чудовищные БД впечатляют! Впрочем, чтобы увидеть базу данных, не спешите потрошить Пентагон. Вот расписание поездов, программа телепередач или классный журнал, – все это простые базы данных. В конце концов, любая БД – это организованное хранилище данных, приспособленное для удобного поиска информации. Нам тоже по силам создать несложную полицейскую базу данных.
Соорудим такую базу с номерами угнанных автомобилей, и воспользуемся для этого текстовым файлом. Допустим, что номера автомобилей – это числа; тогда база данных – это файл с напечатанными в столбик номерами: каждая строка файла содержит один номер. Номера могут следовать в любом порядке, например:
123
325
234
11
Такой файл можно напечатать любым редактором текста, в том числе и встроенным в IDE. Мы так и поступим: создайте новый файл, впечатайте в него десяток-другой пришедших на ум номеров и сохраните в рабочей папке под именем «Police.txt». Окно с этим файлом пока не закрывайте, оно ещё пригодится.
Все, база данных готова! Только не предлагайте полицейскому рыться в этом файле, – вместо благодарности вы услышите совсем другие слова. В довершение доброго дела напишем программу для поиска номера в этой базе. Такая программа должна работать как часовой, запрашивая у полицейского номер автомобиля и сообщая о том, содержится ли этот номер в БД. Признаком выхода из программы будет ввод нулевого номера.
Итак, приступим к программе «P_29_1». Схема главной программы ясна из вышесказанного. Выносить заключение об автомобиле будет функция булевого типа, принимающая два параметра: файловую переменную, связанную с нашей БД, и номер искомого автомобиля. Если номер в базе данных обнаружится, функция вернет значение TRUE. Ввиду простоты алгоритма не буду рисовать блок-схему. Если чуете в себе силу, напишите программу сами, и, после некоторых мучений, сравните с тем, что показано ниже.
{ P_29_1 – Полицейская база данных, версия 1 }
function FindNumber(var aFile: text; aNumber: integer): boolean;
var N: integer; { текущий номер в БД }
begin
FindNumber:= false; { на случай, если файл пуст }
Reset(aFile); { позицию чтения устанавливаем в начало файла }
N:=0; { в начале цикла задаем несуществующий номер }
{ читаем номера из файла, пока НЕ конец файла И номер НЕ найден }
while not Eof(aFile) and (N<>aNumber) do begin