Алгоритмическая задача №3.Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов

Задача №3

Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов (пробелы тоже считаются символами). Цифры и другие символы перемешаны в каждой строке.

Задание: найдите максимальное число, c учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.
Примеры:

fsd334rgd
rfg46gdfg
ter5tge56
123gergf

Ответ: 345

fsd334rgd
r      fg
ter5tge56
123gergf

Ответ: 334

fsd334rgd
r16hyj3f7
23tge6457
123gergf7

Ответ: 6457

program read_file_max_value;
  type  str_arr = array[1..4] of string;
  var f1 : text; // секция обьявления переменных
      filename, s, symb, acc: string;
      res, j, i, check_res,code : integer;
      arr : str_arr;
begin // начало тела основной программы
  filename :='/home/serg/file_pascal.txt';
  assign( f1,filename );
  reset(f1);
  res := 0;
  i := 1;
  while not eof(f1) do
  begin
    readln(f1, s);
    j := 1;
    // writeln(length(s)); //длина строки
    arr[i] := s;  // добавляем в массив очередную строку для
                  // последующего  вертикального подсчета
    while(j <= length( s )) do // обход и подсчет горизонталных строк
    begin
      symb := s[j];
      acc := '';
        while(symb >= '0') and (symb <= '9') do
        begin
          acc += symb; // накапливаем строку
          j += 1;
          if (j <= length(s)) then // если не вышли за длинну строки
              symb := s[j]
          else
              break;
        end;
        if(acc <> '') then
        begin
           Val(acc, check_res, code); // преобразуем  строку
           if(check_res > res) then
               res := check_res;
        end;
    j += 1;
    end;
    i += 1; // увеличиваем индекс массива  arr
  end;
  writeln(res); // результат горизонтального подсчета

  for i := 1 to high(arr) do // уравниваем длинну элементов массива
  begin                      // по длине первого элемента
      if high(arr[i]) < high(arr[1]) then
      begin
        while(high(arr[i]) <> high(arr[1])) do
            arr[i] += ' ';
      end;
      // writeln(high(arr[i])); //длина строки
  end;

  check_res := 0;
  for i := 1 to high(arr[1]) do // обход массива для вертикального подсчета
  begin
    s := '';
    j := 1;
    while(j <= high(arr)) do
    begin
        if (arr[j][i] >= '0') and (arr[j][i] <= '9') then
        begin
            s += arr[j][i]; // накапливаем строку
        end;
        j += 1;
    Val(s, check_res, code); // преобразуем  строку
    if check_res > res then
       res := check_res;
    end;

  end;

  writeln(res); //  результат
  readln();
end. // завершение программы