
- •1.Алфавит языка паскаль
- •9.6.Функции определения порядка
- •10.Тип вещественный
- •12.Операторы
- •12.1.Простые операторы
- •13.2.Вывод данных на монитор
- •13.3.Форматирование при выводе данных
- •17.1.Объявление и вызов подпрограмм
- •19.Блоки (модули) в паскале
- •19.1.Блок Crt (Unit Crt)
- •23.1.Работа с текстовыми файлами
- •24.Динамическая память
- •640 Кбайт ┌───────────────────┐
- •26.Динамические библиотеки
- •28.Тип объект (класс)
- •30.Встроенный ассемблер
- •30.1.Объявление операндов
- •31.Основы работы в графическом режиме
- •34.Многоугольники
- •35.Криволинейные фигуры
- •39.Команды работы редактора
23.1.Работа с текстовыми файлами
Текстовый файл в TP - это совокупность строк переменной длины.
Доступ к строкам последовательный. В конце каждой строки ставится
признак конца строки (CR/LF), а в конце файла - признак конца файла
^Z(CTRL-Z). Любую информацию (числовую, символьную, строчную) текс-
товый файл хранит в виде символов, ее изображающих.
->Процедуры:
=>Read(F,V1,V2,...,Vn); - Читает данные из файла в переменные V1...
=>ReadLn(F,V1,V2,...,Vn); - Отличается тем, что при считывании в
строке N переменных, остальные игнори-
руются и указатель переходит на новую
строку файла.
=>Write(F,V1,V2,..,Vn); - Записывает данные в файл из переменных V1.
=>WriteLn(F,V1,V2,...,Vn); - Отличается тем, что после записи N пе-
ременных остальные игнорируются и за-
пись начинается с новой строки.
Примечания:
->При чтении данных из файла необходимо учитывать все правила
ввода значений переменных разных типов с клавиатуры (см.раз-
дел 11.1).
->При записи данных в файл необходимо помнить о пробелах, раз-
деляющих арифметические константы (кроме типа Real без фор-
мата).
->Пустой текстовый файл содержит только символ #26.
->Функции:
=>Eof(F):Boolean; - True, если достигнут конец файла.
=>Eoln(F):Boolean; - True, если достигнут конец строки.
=>SeekEof(F):Boolean; - True, пропускает пробелы, знаки табуляции,
и т.п.
=>SeekEoln(F):Boolean; - True (аналог Eoln, но пропускает пробелы).
Пример 66.
Считывание текстового файла с диска и распечатка на экране.
Uses Crt;
Var Ft:Text;
S,FN:String;
Begin
ClrScr;
WriteLn('Имя текстового файла ? ');
Readln(FN);
Assign(Ft,FN);
Reset(Ft);
ClrScr;
While Not Eof(Ft) Do Begin
Readln(Ft,S);
WriteLn(S);
End;
Close(Ft);
End.
23.2.Работа с файлами без типа
Нетипизированными файлами описываются каналы ввода/вывода низ-
кого уровня, позволяющие осуществить прямой доступ к дисковым фай-
лам вне зависимости от их формата. Пусть F - файловая переменная.
->Процедуры:
=>Seek(F,N); - Передвигает указатель файла на N-ую позицию.
=>BlockRead(F,VarBuf,Count[,VarResult]); - Читает из файла F Count
компонент размера B в буфер VarBuf. Если есть VarResult, то она
принимает значение реально считанных компонент за одно обращение.
Если этой переменной нет, а считано меньше компонент, чем требо-
валось, то возникает ошибка ввода/вывода. Переменная VarBuf долж-
на быть объявлена так, чтобы под нее было зарезервировано B * Co-
unt байт (например массивом).
=>BlockWrite(F,VarBuf,Count[,VarResult]); - Записывает в файл F Co-
unt компонент размера B из буфера VarBuf. Если VarResult не испо-
льзуется, а записано компонент меньше, чем требуется (нет места
на диске), то возникает ошибка ввода/вывода. При использовании
четвертого параметра в нем содержится число реально записанных
компонент.
->Функции:
=>Eof(F):Boolean; - True, если достигнут конец файла.
=>FileSize(F):LongInt; - Для открытого файла определяет размер фай-
ла в компонентах.
=>FilePos(F);LongInt; - Определяет положение указателя в открытом
файле (нумерация компонент идет с нуля).
Пример 67.
Program CopyFile;
Const N=4096;
Var FOut,FIn:File;
Nr,Nw:Word;
Buf:Array[1..N] Of Char;
Begin
Assign(FIn,'NameInFile');
{$I-}
Reset(FIn,1);
{$I+}
If IoResult<>0 Then Exit;
Assign(FOut,'NameOutFile');
Rewrite(FOut,1);
Repeat
BlockRead(FIn,Buf,N,Nr);
BlockWrite(FOut,Buf,Nr,Nw);
Until (Nr=0)Or(Nw<>Nr);
Close(FIn);
Close(FOut);
End.
23.3.Работа с типизированными файлами
Файлы такого типа состоят из однотипных компонент, причем их
количество не оговаривается. Доступ к компонентам ведется через
указатель файла. При чтении и записи этот указатель перемещается к
следующей компоненте. Поскольку все компоненты имеют одинаковую
длину, то возможен произвольный доступ к компонентам файла.
->Процедуры:
=>Read(F,V1,V2,...,Vn); - Читает данные из файла в переменные V1..
=>Write(F,V1,V2,..,Vn); - Записывает данные в файл из переменных V1.
=>Seek(F,N); - Передвигает указатель файла на N-ую позицию.
->Функции:
=>Eof(F):Boolean; - True, если указатель достиг конца файла.
=>FileSize(F):LongInt; - Определяет количество компонент в файле.
=>FilePos(F):Longint; - Определяет номер текущей компоненты.
->Дополнительные процедуры для работы с файлами и каталогами:
=>Truncate(F); - Отсекает (отбрасывает) конец открытого файла от
текущей позиции, т.е. - это частичное стирание.
Пример 68.
Seek(F,K);
Truncate(F); {удаляются все компоненты с номера k+1 в типи-
зированном файле или блоке в безтиповом файле}
=>GetDir(Dr:Byte; Var S:String) - Возвращает текущее имя каталога
на диске Dr.
=>ChDir(S:String) - Устанавливает текущий каталог с именем S.
=>MkDir(S:String) - Создает каталог с именем S (без перехода туда).
=>RmDir(S:String) - Удаляет пустой и не текущий каталог с именем S.
Пример 69.
->ChDir('C:\PASCAL\EXE');
->ChDir('..'); - Выход из подкаталога.
->ChDir('..\TOOLS'); - Выход из текущего с переходом в TOOLS.
->ChDir('\'); - Возврат в корневой каталог.