Считывание данных из файла в записи - 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.

  1. Объявление переменных:
    • f: текстовый файл, в который считываются данные;
    • s: строка, в которой накапливаются считанные данные;
    • c: символ, считываемый из файла;
    • a: массив из 20 записей типа stud, в которые записываются данные;
    • n, i, j: целочисленные переменные для подсчета количества записей и индексов массива.
  2. Открытие файла 1.txt для чтения с помощью функции assign(f, '1.txt').
  3. Сброс позиции файла в начало с помощью функции reset(f).
  4. Инициализация переменных n, s и c значением 0, пустой строки и первого считанного символа соответственно.
  5. Чтение данных из файла до конца строки с помощью цикла while not eoln(f) do.
  6. Если считанный символ не является дефисом -, то он добавляется в строку s.
  7. Если считанный символ является дефисом -, то выполняются следующие действия:
    • увеличивается значение переменной 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].
  8. Закрытие файла с помощью функции close(f).
  9. Цикл for i:=1 to n do выполняет запись фамилии, номера группы и значений полей ocn[1], ocn[2] и ocn[3] в консоль с помощью функции writeln.
  10. Значение переменной n выводится в консоль с помощью функции writeln.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы