шаблоны сайт визитка joomla
Скачать шаблоны Joomla 3.5 бесплатно
Вы находитесь здесь:Главная»Учебные материалы»Pascal»Pascal. Файлы: операции с файлами, виды файлов, примеры задач.

Pascal. Файлы: операции с файлами, виды файлов, примеры задач.

Файлы в Pascal, типы файлов и основные оперции над ними.

В язык Паскаль выделяются данные файлового типа, которые служат для работы с информацией, расположенной на внешних устройствах. Эта информация формируется во внешней памяти компьютера, образуя некоторую область, называемую файлом. Файлы имеют имя и представляют собой совокупность однотипных элементов. Обычно они применяются, в случаях большого объема данных, долгосрочного хранения, либо необходимости предоставления доступа нескольким приложениям к одной и той же информации.

Файлы принято разделять на физические и логические. Физические файлы имеют имя, и располагаются на съемном носителе, а логические это те переменные файлового типа, которые их представляют в программе.

В Паскале различают следующие три вида файлов (в скобках описаны ключевые слова для инициализации файловой переменной):

  • текстовые файлы (text);
  • типизированные (file of <тип>);
  • бестиповые (file).

Немного позже мы разберемся с каждым из них. А сейчас рассмотрим основные операции для работы с файлами.

Создание файла

Assign(<имя файловой переменной>, <имя файла>)

Процедура Assign связывает переменную файлового типа с физическим файлом. Например, установить соответствие между переменной Fil и текстовым файлом lot, расположенном на диске D, можно так:

Assign(Fil, ‘D:\lot.txt’)

Режим чтения

Reset(<имя файловой переменной>)

Процедура Reset открывает файл в режиме чтения, после чего операторомRead(<файловая переменная>, <считываемый элемент>) можно осуществить последовательное считывание элементов в программу.

Конец файла

ЕOF(<имя файловой переменной>)

Количество элементов в файле заранее не определяется, но часто необходимо знать о моменте достижения конца файла. Для этого в Паскале существует логическая функция EOF, которая проверяет достигнут ли конец, и если это так, то принимает значение True, иначе – False. Осуществляется проверка, как правило, в цикле, в качестве условного выражения выступает функция EOF.

Режим записи

Rewrite(<имя файловой переменной>)

Открыв файл в режиме записи, можно поэлементно записать в него информацию, воспользовавшись процедурой Write(<файловая переменная>, <элемент>).

Закрытие файла

Close(<имя файловой переменной>)

Процедура Close закрывает открытый файл, а также освобождает файловую переменную, указанную в качестве параметра.

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

Erase(<имя файловой переменной>)

При помощи процедуры Erase, можно удалить с внешнего носителя, заранее закрытый файл.

Изменение имени файла

Rеnаmе(<имя файловой переменной>, ‘<новое имя файла>’)

Rеnаmе переименовывает физический файл, который перед этим следует закрыть процедурой Close.

Смещение указателя файла

Sееk(<имя файловой переменной>, <номер элемента>)

Процедура Sееk устанавливает позицию указателя в файле на необходимый элемент (нумерация элементов начинается с нуля).

Определение положения указателя

FilePos(<имя файловой переменной>)

Функция FilePos принимает значение порядкового номера элемента, над которым в момент вызова находиться указатель.

Определение количества элементов

FileSize(<имя файловой переменной>)

Функция FileSize определяет количество всех имеющихся в файле элементов.

Текстовые файлы

Текстовые файлы могут состоять  из элементов символьного (char) и строкового (string) типа данных. Ключевое слово Text указывает, что файловая переменная создается для работы именно с текстовым файлом:

Var <идентификатор>: Text;

Структура текстового файла представляет собой последовательность строк, которые в свою очередь состоят из символов. Любая строка оканчивается признаком «конца строки», а сам файл признаком «конца файла». Для определения конца файла в Паскаль есть функция EOF, а для конца строки –EOLn:

EOLn(<имя файловой переменной>)

В случае достижения конца строки она (функция EOLn) принимает значение True, в противном случае False.

 

Примеры задач на работу с файлами в Pascal:

1.Создать файл X компонентами которого являются элемента массива M. Переписать из файла X в файл Y все компоненты, которые стоят на четных местах. Прочитать файл Y.
M = (0,1; 5,6; 0.8; 2,4; 7,3; 6,8; 0,5; 2,3;)

const M: array[1..8] of real = (0.1, 5.6, 0.8, 2.4, 7.3, 6.8, 0.5, 2.3);
var
x,y : file of real;  

n: real;   i: byte;
begin
     assign(x,'x.dat');
     assign(y,'y.dat');
     rewrite(x);
       for i:=1 to 8 do
       write(x, M[i]);
      close(x);
  reset(x);
  rewrite(y);
  i := 1;
    while not EOF(x) do begin
      read(x, n);
      if not odd(i) then
      write(y, n);
      i := i + 1;
      end;
 close(x);    close(y);
  reset(y);
  while not EOF(y) do begin
      read(y, n);
      write(n:5:1);
    end;
 writeln;
 close(y);
end.

2. Дан файл, в котором через пробел записаны натуральные числа. Вывести на экран суммы цифр каждого числа.

var
f: file of char;
c: char;    sum, n: word;

begin
   assign(f,'nums.txt');
   reset(f);
   sum := 0;
   while not eof(f) do begin
      read(f,c);

      if c <> ' ' then begin
          val(c, n);
          sum := sum + n;
          end
      else begin
          write(sum:5);
          sum := 0
          end;
     end;

 writeln;
 end.

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

var
  f: text;
  s: string;
   i, lect, pract, lab: byte;
begin
    assign(f,'lessons.txt');
    reset(f);
    lect := 0;
    pract := 0;
    lab := 0;
    while not Eof(f) do begin
        readln(f,s);
        i := pos('лекц.',s);
        if i <> 0 then lect := lect + 1
        else begin
           i := pos('практ.',s);
           if i <> 0 then pract := pract + 1
           else begin
               i := pos('лаб.',s);
              if i <> 0 then lab := lab + 1
              end;
           end;
        end;
 close(f);
 writeln('Лекций: ', lect);
 writeln('Практических: ', pract);
 writeln('Лабораторных: ', lab);
end.

4. Дана текстовая строка, состоящая из заглавных латинских букв. Требуется найти подстроку из трёх букв, которая встречается в данной строке чаще всего. Например, в строке DEFDEFABCABCZABCDEFDEF чаще всего (4 раза) встречается подстрока DEF. Входной файл содержит текстовую строку. Выходной файл должен содержать единственное число — количество вхождений самой часто встречающейся подстроки из трёх букв. Длина исходной строки от 3 до 1000000 символов.

var
  t1, t2: text;
  n, i, j, k: integer;
  s, s1, s2: string;
begin
 Assign(t1, 'D:\Users\Пользователь\Desktop\1.txt');
 Assign(t2, 'D:\Users\Пользователь\Desktop\2.txt');
 reset(t1);
 rewrite(t2);
 read(t1, s);
 k := 0;
 for i := 1 to length(S) - 2 do
   begin
    s1 := copy(s, i, 3);
    for j := 1 to length(s) - 2 do
        begin
        s2 := copy(s, j, 3);
        if s2 = s1 then inc(k);;
        end;
    if k > n then n := k;
    k := 0;
    end;
 write(t2, n);
 close(t1);
 close(t2);
end.

5. Посчитать сколько содержится в файле символов, строк и слов. Разделителями слов считать пробелы и перенос строки.
var

   f: file of char;
   fname: string;
   ch: char;
   n, line, w: word;
   flag: boolean;
begin
    write('File address&name: ');
    readln(fname);
    assign(f, fname);
    reset(f);
    n := 0;   line := 0;   w := 0;   flag := false;
    while not EOF(f) do begin
           read(f, ch);
           if ord(ch) = 13 then begin
                read(f, ch);
                line := line + 1;
                flag := false;
            end
           else begin
                 n := n + 1;
                 if ch = ' ' then flag := false
                 else
                       if flag = false then begin
                                w := w+1;
                                flag := true;
                        end;
             end;
     end;
    if n <> 0 then line := line + 1;
    writeln(n);
    writeln(line);
    writeln(w);
     readln;
end.

6.Прочитать данные из текстового файла и записать их в нетипизированный файл.

var
   f_in: text;
   f_out: file;
   name_in, name_out: string;
   buffer: array[1..8] of integer;
   i,k: integer;
begin
{$I-}
    write('Входной файл: ');readln(name_in);
    assign(f_in,name_in);
    reset(f_in);
    if IOResult <> 0 then begin
        writeln ('Файл не найден!');
        exit
    end;
    write('Выходной файл: ');readln(name_out);
    assign(f_out,name_out);
    rewrite(f_out,sizeof(integer)*8);
{$I+}
    i := 0;
    while not eof(f_in) do begin
         inc(i);
         read(f_in,buffer[i]);
         if i = 8 then begin
             blockwrite(f_out,buffer,1);
             i := 0
         end;
    end;
    if i <> 0 then begin
         for k:=i+1 to 8 do buffer[k] := 0;
         blockwrite(f_out,buffer,1);
    end;
    close(f_in);
    close(f_out);
    readln
end.

7. В текстовом файле содержатся сведения о количестве учащихся в классах и их классных руководителях. Количество классов в школе не превышает 20. Для описания каждого класса отводится одна строка. В первых четырех позициях каждой строки файла записано имя класса (например, 5a, 10b) класса (не пишите русских букв), а затем количество человек в нем и ФИО руководителя. Программа по запросу выдает сведения о классе или сообщение о том, что класс не найден.

const n = 20;
type
     str4 = string[4];
     clas = record
               title: str4;
               pupils: byte;
               teacher: string[25];
      end;
var
     school: array[1..n] of clas;
      i,j,len: integer;
      title_search: str4;
      found: boolean;
      f: text;
begin
    assign(f,'c:/school.txt'); reset(f);
    i := 1;
    while not Eof(f) do begin 
          with school[i] do
         readln(f,title,pupils,teacher);
         i := i + 1;
     end;
     while true do begin
                write('Input class: ');
                readln(title_search);
                len := length(title_search);
                if len = 0 then break;
                for j := len + 1 to 4 do
                       title_search := title_search + ' ';
                found := false;
                for j := 1 to i - 1 do begin
                       if title_search <> school[j].title then continue;
                       with school[j] do
                            writeln(title:5,pupils:5,teacher:25);
                       found := true;
                       break;
                end;
                if not found then
                       writeln('No class!');
               end;
end.

8.Найти в строке все заданные последовательности символов и заменить их другой последовательностью.

var
     s_out, s_in, str: string;
     f : text;
     i, len : integer;
begin
   assign(f,'c:/text.txt');
   reset(f);
   writeln('What cut? ');
   readln(s_out);
   writeln('What paste? ');
   readln(s_in);
   len := length(s_out);
   while not Eof(f) do begin
        readln(f,str);
        i := 1;
   while i<>0 do begin
        i := pos(s_out,str);
        if i<>0 then begin
               delete(str,i,len);
               insert(s_in,str,i);
        end;
   end;
   writeln(str);
   end;
   close(f);
   readln;
end.

Похожие материалы (по тегу)

Новости о нас

Не без помощи родительской бдительности результаты голосования подсчитывались на момент 8 декабря в 12:00 суммированием количества лайков и количества голосов, отданных в технопарке.  Подробнее
1 декабря более 50 наставников со всей республики собрались в нашем технопарке на... Подробнее
Участие приняло 180 детей, среди которых выявлены лучшие - победители отбора. Смотрите результаты... Подробнее
КАЖДУЮ ПЯТНИЦУ - бесплатное занятие по 3D-моделированию с 16:40 до 18:10. Только для учащихся... Подробнее
 Региональный отборочный фестиваль "Робофест-Стерлитамак 2018" состоится 25-26 января в г.... Подробнее

Наши партнеры

 TZOyoOCZ8y0 logotip novy SF BashGU  utv logo  CityMoll  VolnoeDelo