Найти, в каком году вышел первый альбом исполнителя - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть текстовый файл, в нем информация о певце, кол-во песен, название альбома, год выпуска альбома, жанр. Информация разделена табом(Tab). Задача, найти в каком году вышел первы альбом и т.д. делоне в этом. В строчках 61 и 47 компилятор выдает ошибку, там стоит условие, если встречаем символ Таб, то выходим из тела цикла. Не могу понять, что не так. Подскажите.
Program WWTxtFile;
Uses
  Crt,SysUtils;
Const
  SimY='##';SimAl='***';
  TxtFile='Kolekcija.txt';
  AuxiliaryF='MaxMin.txt';
Type
  InPut=Record
    YearMax:String;
    AlbumMax:String;
    YearMin:String;
    AlbumMin:String;
  end;
Var
  F:File of InPut;
  T:Text;

  Procedure Initial;
    var
      Rab:InPut;
    begin
      Assign(F,AuxiliaryF);
      Reset(F);
      With Rab do
       begin
         YearMax:='0';
         AlbumMax:='0';
         YearMin:='9999';
         AlbumMin:='99';
       end;
      Write(F,Rab);
      Close(F);
    end;
 
   Function FindYear(Str:String;I:Byte):String;
    var
      Temp:String;
      J:LongInt;
    begin
      Temp:='';
      J:=I+Length(SimY);
      Repeat
        Temp:=Temp+Str[J];
        Inc(J);
      Until Str[I]=#9;
      FindYear:=Temp;
    end;
 
  Function FindAl(Str:String;I:Byte):String;
    var
      Temp:String;
      J:LongInt;
    begin
      Temp:='';
      J:=I+Length(SimAl);
      Repeat
        Temp:=Temp+Str[J];
        Inc(J);
      Until Str[J]=#9;
      FindAl:=Temp;
    end;
 
  Procedure InPutData;//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov
    var
      I:LongInt;
      Rab:InPut;
      Str:String;
      Year,AlCount:String;
    begin
      ReadLn(T,Str);
      Str:=Str+#9;
      WriteLn(Str);
      For I:=1 to Length(Str) do
        begin
         If Str[I]='#' then Year:=FindYear(Str,I);
         If Str[I]='*' then AlCount:=FindAl(Str,I);
        end;
      With Rab do
        begin
          If StrToInt(YearMax)<StrToInt(Year) then YearMax:=Year;
          If StrToInt(YearMin)>StrToInt(Year) then YearMin:=Year;
          If StrToInt(AlbumMax)<StrToInt(AlCount) then AlbumMax:=AlCount;
          If StrToInt(AlbumMin)>StrToInt(AlCount) then AlbumMin:=AlCount;
        end;
      Write(F,Rab);
    end;
 
Begin
  ClrScr;
  Assign(T,TxtFile);
  Reset(T);
  Initial;
  While Not EoF(T) do
    begin
      Assign(F,AuxiliaryF);
      Reset(F);
      InPutData;
      Close(F);
    end;
  Close(T);
End.

Решение задачи: «Найти, в каком году вышел первый альбом исполнителя»

textual
Листинг программы
Program WWTxtFile;
Uses
  Crt,SysUtils;
Const
  SimY='##';SimAl='***';
  TxtFile='Kolekcija.txt';
  AuxiliaryF='MaxMin.txt';
Type
  InPut=Record
    YearMax:String;
    AlbumMax:String;
    YearMin:String;
    AlbumMin:String;
  end;
Var
  F:File of InPut;
  T:Text;
  D:InPut;
 
  Procedure Initial(var Rab:InPut);
    begin
      Assign(F,AuxiliaryF);
      Reset(F);
      With Rab do
       begin
         YearMax:='0';
         AlbumMax:='0';
         YearMin:='9999';
         AlbumMin:='99';
       end;
      Write(F,Rab);
      Close(F);
    end;
 
   Function FindYear(Str:String;var I:Byte):String;
    var
      Temp:String;
      J:LongInt;
    begin
      Temp:='';
      J:=I+length(SimY);
      I:=J;
       while  (Str[J]<>#9) do
       begin
        Temp:=Temp+Str[J];
        Inc(J);
       end;
      FindYear:=Temp;
    end;
 
  Function FindAl(Str:String;var I:byte):String;
    var
      Temp:String;
      J:LongInt;
    begin
      Temp:='';
      J:=I+length(SimAl);
      I:=J;
      while (Str[J]<>#9) do
      begin
        Temp:=Temp+Str[J];
        Inc(J);
      end;
      FindAl:=Temp;
    end;
 
  Procedure InPutData(var Rab :InPut);//sozdanije fajla s max i min godom, max koli4estvo albomov i minimalnim kol-vo albomov
    var
      i:byte;
      Str:String;
      Year,AlCount:String;
    begin
      ReadLn(T,Str);
      Str:=Str+#9;
      WriteLn(Str);
      i:=1;
      while i<=length(Str) do
        begin
         If Str[i]='#' then Year:=FindYear(Str,i);
         If Str[i]='*' then AlCount:=FindAl(Str,i);
         inc(i);
        end;
      With Rab do
        begin
          If StrToInt(Rab.YearMax)<StrToInt(Year) then Rab.YearMax:=Year;
          If StrToInt(Rab.YearMin)>StrToInt(Year) then Rab.YearMin:=Year;
          If StrToInt(Rab.AlbumMax)<StrToInt(AlCount) then Rab.AlbumMax:=AlCount;
          If StrToInt(Rab.AlbumMin)>StrToInt(AlCount) then Rab.AlbumMin:=AlCount;
        end;
      Write(F,Rab);
    end;
 
Begin
  ClrScr;
  Assign(T,TxtFile);
  Reset(T);
  Initial(D);
 
  While Not EoF(T) do
    begin
      Assign(F,AuxiliaryF);
      reset(f);
      InPutData(D);
      close(f);
    end;
  Close(T);
End.

Объяснение кода листинга программы

  1. Объединение строк с помощью оператора +.
  2. Использование функции StrToInt для преобразования строк в целые числа.
  3. Использование функций FindYear и FindAl для поиска года и названия альбома соответственно.
  4. Использование цикла while для чтения строки из файла до тех пор, пока не будет достигнут символ #.
  5. Использование условного оператора If для установки значений переменных Year и AlCount.
  6. Использование цикла while для чтения строк из файла до тех пор, пока не будет достигнут символ #.
  7. Использование условного оператора If для установки значений переменных Rab.YearMax, Rab.YearMin, Rab.AlbumMax и Rab.AlbumMin.
  8. Запись обновленных данных обратно в файл.
  9. Повторение процесса до тех пор, пока не будет достигнут конец файла.
  10. Закрытие файла после завершения чтения.

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

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