Урок 18 задача 2. Чтение данных -- Работа с файлами в Паскаль

У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл 2):
Вася 16 485
Коля 17 555
Юра 18 61
где: слева указаны имена участников, а справа число баллов.
Первое число в каждой строке -- штрафные баллы набранные участниками, а второе число -- "положительные баллы", то есть если у нас есть строка:
Vasya N M
где N -- число шрафных баллов, а M - число баллов положительных, то итоговая оценка Васи Z вычисляется как разность:
Z=M−N.
Напишите программу, которая определяет победителя и его итоговый балл (прочитав данный файл построчно).
По возможности разбивайте код на процедуры и функции.

Var
   f1 : text; // тип для открытия текстового файла
   filename, fail_st,pobed_im  : string;
   pobeditel : integer;
  procedure opr_2(pob_ima: string; pob_rez:integer;var pobeditel: integer;var pobed_im:string);
  begin
    if(  pobeditel < pob_rez) then
    begin
       pobeditel:=  pob_rez;
       pobed_im:= pob_ima ;
    end;
  end;

  procedure opr_1(fail_st: string); // начало объявления процедуры
  var opr_cifra,chislo_v: boolean;
      j,i,intChislo,Code, chislo_1,chislo_2,chs_viv: integer;
      m,chi_1,chi_2,ima_viv : string;
  begin
    chi_1 := ''; chi_2 := ''; m := ''; ima_viv := ''; // инициализация переменных
    opr_cifra:=true;
    chislo_v:= true;
    for i:=1 to length(fail_st) do
    begin
      if (fail_st[i]=' ') or (fail_st[i]>='0') and (fail_st[i]<='9') then
        m := m + fail_st[i]
      else
        ima_viv := ima_viv + fail_st[i];
    end;
    for j:=1 to length(m) do
    begin
      if (m[j]=' ') and (opr_cifra = false)  then
      begin
        opr_cifra:=true;
        chislo_v :=false;
      end;
      if (m[j]>='0') and (m[j]<='9') then
      begin
        opr_cifra := false;
        if( chislo_v =true) then
          chi_1 := chi_1 + m[j]
        else
          chi_2 := chi_2 + m[j];
      end;
    end;
    Val(chi_1, intChislo, Code);
    chislo_1 := intChislo;
    Val(chi_2, intChislo, Code);
    chislo_2 := intChislo;
    chs_viv := chislo_2 - chislo_1 ;
    opr_2( ima_viv  ,chs_viv,pobeditel,pobed_im);
  end;
 begin
  pobeditel:= 0;
  filename := 'D:\Pascal\Lab18\1\input.txt'; // путь к файлу
  WriteLn('Put k failu programmy: ');
  WriteLn(ParamStr(0));
  assign(f1, filename);
  {$I-} reset(f1);  {$I+}  // попытка открыть файл на чтение с подавлением ошибки
  if IOResult <> 0 then    // если есть ошибки
  begin
    writeLn('File ', filename, ' ne naiden!');
  end else  // если удалось открыть на чтение
  begin
    writeLn('File ', filename, ' suchectvuet. I vot ego soderzimoe:');
    while not eof(f1) do
      begin
        readln(f1, fail_st);
        opr_1 (fail_st );
     end;
  end;
  writeln('pobedil ', pobed_im, ' shet ',  pobeditel);
  writeLn('========= konez faila =========');
  readln();
end.