Считывание данных из файла в записи - PascalABC.NET
Формулировка задачи:
Файл состоит из записей о каждом студенте (фамилия, номер группы, оценки по трём предметам). Поля разделены знаком нижнего подчёркивания "_", а записи знаком тире "-". И нужно считать эти данные в массив из записей. Знаю, только как считать данные, находящиеся в отдельных строках, а как считать с разделителем "-" - понятия не имею.
Решение задачи: «Считывание данных из файла в записи»
textual
Листинг программы
type stud=record fam:string[20]; grp:integer; ocn:array[1..3] of byte; end; var f:text; s:string; c:char; a:array[1..20] of stud; n,i,j:integer; begin assign(f,'1.txt');//файл в папке с программой reset(f); n:=0; s:=''; while not eoln(f)do begin read(f,c); if c<>'-' then s:=s+c else begin inc(n); a[n].fam:=copy(s,1,pos('_',s)-1); delete(s,1,pos('_',s)); a[n].grp:=strtoint(copy(s,1,pos('_',s)-1)); delete(s,1,pos('_',s)); s:=s+'_'; for i:=1 to 3 do begin a[n].ocn[i]:=strtoint(copy(s,1,pos('_',s)-1)); delete(s,1,pos('_',s)); end; s:=''; end; end; close(f); for i:=1 to n do begin write(a[i].fam,' ',a[i].grp,' '); for j:=1 to 3 do write(a[i].ocn[j],' '); writeln; end; end.
Объяснение кода листинга программы
В данном коде используется язык программирования PascalABC.Net. Задача заключается в считывании данных из файла и записи их в записи типа stud
.
- Объявление переменных:
- f: текстовый файл, в который считываются данные;
- s: строка, в которой накапливаются считанные данные;
- c: символ, считываемый из файла;
- a: массив из 20 записей типа
stud
, в которые записываются данные; - n, i, j: целочисленные переменные для подсчета количества записей и индексов массива.
- Открытие файла
1.txt
для чтения с помощью функции assign(f, '1.txt'). - Сброс позиции файла в начало с помощью функции reset(f).
- Инициализация переменных n, s и c значением 0, пустой строки и первого считанного символа соответственно.
- Чтение данных из файла до конца строки с помощью цикла while not eoln(f) do.
- Если считанный символ не является дефисом
-
, то он добавляется в строку s. - Если считанный символ является дефисом
-
, то выполняются следующие действия:- увеличивается значение переменной n;
- записывается фамилия (до первого дефиса) в поле fam записи a[n];
- записывается значение поля fam в переменную s;
- удаляются все символы из строки s кроме цифр;
- записывается значение переменной s в поле grp записи a[n];
- удаляются все символы из строки s кроме цифр;
- записывается значение поля grp в переменную s;
- удаляются все символы из строки s кроме цифр;
- записываются значения полей ocn[1], ocn[2] и ocn[3] в переменную s;
- удаляются все символы из строки s кроме цифр;
- записывается значение переменной s в поле ocn[i] записи a[n];
- сбрасывается значение переменной s в пустую строку;
- цикл for i:=1 to 3 do выполняется три раза, в каждый из которых записывается значение переменной s в поле ocn[i] записи a[n].
- Закрытие файла с помощью функции close(f).
- Цикл for i:=1 to n do выполняет запись фамилии, номера группы и значений полей ocn[1], ocn[2] и ocn[3] в консоль с помощью функции writeln.
- Значение переменной n выводится в консоль с помощью функции writeln.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д